为 Jest 模拟 Reactotron
Mocking Reactotron for Jest
我已经用几乎默认的配置设置了 Reactotron:
import Reactotron from 'reactotron-react-native';
import { reactotronRedux } from 'reactotron-redux';
const reactotron = Reactotron
.configure()
.useReactNative()
.use(reactotronRedux())
.connect();
export default reactotron;
并在 'index.js' 中导入:
if (__DEV__) { import('./app/utils/reactotron'); }
但在此之后,大多数 Jest 测试都失败了,并出现下一个错误:
ReferenceError: WebSocket is not defined
8 | .useReactNative()
9 | .use(reactotronRedux())
> 10 | .connect();
| ^
11 |
12 | export default reactotron;
at createSocket (node_modules/reactotron-react-native/dist/index.js:1:13571)
at a.value (node_modules/reactotron-core-client/dist/index.js:1:8397)
at Object.<anonymous> (app/utils/reactotron.js:10:1)
看起来我需要将 WebSocket 或其他东西添加到全局变量以进行测试,但我应该为所有测试都这样做还是有任何方法可以为所有测试添加一次?
对于这种情况,我们似乎需要模拟 reactotron-react-native
包。所以要解决这个问题,只需将一个 __mocks__
文件夹放入您的根文件夹,并在其中添加与 package.xml 同名的文件。所以对于这种情况,它将是 'reactotron-react-native.js'。该文件应该模拟包中的所有函数。对我有帮助的下一个:
const reactotron = {
configure: () => reactotron,
useReactNative: () => reactotron,
use: () => reactotron,
connect: () => reactotron,
};
module.exports = reactotron;
在这种情况下,它允许链接函数,因此可以更改测试中的调用顺序。
我已经用几乎默认的配置设置了 Reactotron:
import Reactotron from 'reactotron-react-native';
import { reactotronRedux } from 'reactotron-redux';
const reactotron = Reactotron
.configure()
.useReactNative()
.use(reactotronRedux())
.connect();
export default reactotron;
并在 'index.js' 中导入:
if (__DEV__) { import('./app/utils/reactotron'); }
但在此之后,大多数 Jest 测试都失败了,并出现下一个错误:
ReferenceError: WebSocket is not defined
8 | .useReactNative()
9 | .use(reactotronRedux())
> 10 | .connect();
| ^
11 |
12 | export default reactotron;
at createSocket (node_modules/reactotron-react-native/dist/index.js:1:13571)
at a.value (node_modules/reactotron-core-client/dist/index.js:1:8397)
at Object.<anonymous> (app/utils/reactotron.js:10:1)
看起来我需要将 WebSocket 或其他东西添加到全局变量以进行测试,但我应该为所有测试都这样做还是有任何方法可以为所有测试添加一次?
对于这种情况,我们似乎需要模拟 reactotron-react-native
包。所以要解决这个问题,只需将一个 __mocks__
文件夹放入您的根文件夹,并在其中添加与 package.xml 同名的文件。所以对于这种情况,它将是 'reactotron-react-native.js'。该文件应该模拟包中的所有函数。对我有帮助的下一个:
const reactotron = {
configure: () => reactotron,
useReactNative: () => reactotron,
use: () => reactotron,
connect: () => reactotron,
};
module.exports = reactotron;
在这种情况下,它允许链接函数,因此可以更改测试中的调用顺序。