【问题标题】:Mocking Reactotron for Jest嘲笑 Reactotron
【发布时间】:2019-03-07 07:48:55
【问题描述】:

我已经用几乎默认的配置设置了 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 或其他东西添加到全局变量中以进行测试,但是我应该为所有测试都这样做还是有什么方法可以为所有测试添加一次?

【问题讨论】:

    标签: react-native jestjs reactotron


    【解决方案1】:

    对于这种情况,我们似乎需要模拟 reactotron-react-native 包。因此,要解决它,只需将__mocks__ 文件夹放入您的根文件夹并添加与包同名的文件。所以对于这种情况,它将是“reactotron-react-native.js”。这个文件应该模拟包中的所有函数。对我来说帮助了下一个:

    const reactotron = {
      configure: () => reactotron,
      useReactNative: () => reactotron,
      use: () => reactotron,
      connect: () => reactotron,
    };
    
    module.exports = reactotron;
    

    在这种情况下,它允许函数链接,因此可以更改测试中调用的顺序。

    【讨论】:

    • 为了在我的情况下工作,目录必须是__mocks__。不知道有什么区别,但请注意这一点,以防其他人有这个问题。
    • @DonBranson 你是完全正确的,在我的情况下它也是 mocks 。让我更新答案
    • 其实是带下划线的,但是StackOverflow把它当成粗体=)
    猜你喜欢
    • 1970-01-01
    • 2014-10-27
    • 2016-10-02
    • 2019-12-20
    • 2019-02-15
    • 2010-09-23
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多