【问题标题】:Substitute or mock import of another file替换或模拟导入另一个文件
【发布时间】:2020-06-30 19:57:55
【问题描述】:

我想在不更改 foo.js 的情况下使用 Jest 测试 foo.js 中的函数。我确实想测试像getBaseOs 这样的原生函数。简单地从foo.js 导入一个函数将评估foo.js 的所有导入语句。任何依赖本机代码的导入都会触发错误,并且测试不会运行。

有没有办法替代像getBaseOs 这样的导入,但只能在测试文件foo.test.js 中?我只是想在foo.test.js 中忽略getBaseOs 以允许测试。即使替换不是办法,有没有办法做到这一点?

// foo.js
import React from 'react';
import { View, } from 'react-native';
import { getBaseOs, } from 'react-native-device-info';

export default function foo(props) {
  return null;
}

// foo.test.js
import 'react-native';
import foo from './foo';

describe('test import substitution', () => {
  it('test getBaseOs', () => {
    const getBaseOs = jest.fn();
    expect(true).toBe(true);
  });
});

【问题讨论】:

    标签: javascript reactjs react-native jestjs


    【解决方案1】:

    我刚刚在 2019 年 6 月 20 日发表评论的用户 karimo255 在 GitHub 上找到了答案。只需将代码放入 __mocks__/react-native-device-info.js 即可在测试中替换代码,尽管导入。我推测 Jest 在执行单个测试之前从 __mocks__ 导入文件,并将文件名称与要匹配的导入名称匹配。重命名文件会破坏它。

    这里是替换react-native-device-info__mocks__/react-native-device-info.js的import语句的文件:

    export default {
      getBaseOs: () => 'A',
    };
    

    【讨论】:

      猜你喜欢
      • 2019-09-19
      • 2020-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-21
      • 1970-01-01
      • 2021-09-18
      相关资源
      最近更新 更多