jest.mock()仅在jestSetup.js中起作用

时间:2018-08-02 16:49:06

标签: react-native testing mocking jestjs

我的jestSetup.js文件(从package.json指向)中有最有趣的模拟(模拟的函数,模块和组件),并且在单个测试文件中也具有模拟,包括单元测试和快照测试。 。

在我的单个快照测试中,模拟不再起作用(因为升级到RN 0.56)-模拟存在(我可以用console.log它们登录),但是当运行快照测试时,模拟函数不会被调用-而是称为“实际”功能。对于以相同方式定义但仍放在jestSetup.js中的模拟,情况并非如此-快照在jestSetup.js中定义时,快照按预期方式调用了模拟函数。

我已将尽可能多的模拟迁移到jestSetup.js,但不幸的是,某些测试要求取消模拟功能(例如单元测试),因此无法修复所有新错误。

有人可以看到一种方法来启用我的模拟在单独的测试文件中工作吗?

Profile.test.js

import 'react-native';
import renderer from 'react-test-renderer';
import React from 'react';
import sinon from 'sinon';

jest.mock(
  '../../src/components/common/ProfilePicture/StarredPicture/StarredPicture',
  () => () => { return ''; },
);

test('renders correctly', () => {
  const stub = sinon.stub(console, 'error');
  const tree = renderer.create(<Profile />).toJSON();
  const tree = renderer
    .create(<Profile />)
    .toJSON();
  expect(tree).toMatchSnapshot();
  // call count is one to reflect one required proptypes.
  expect(stub.callCount).toEqual(1);

package.json

"jest": {
    "automock": false,
    "preset": "react-native",
    "setupFiles": [
      "./src/jestSetup",
    ],
    "transform": {
      "^.+\\.js$": "<rootDir>/node_modules/react-native/jest/preprocessor.js"
    },
    "transformIgnorePatterns": [
      "node_modules/(?!@expo)/"
    ],
    "collectCoverageFrom": [
      "src/**/*.js"
    ]
  }

0 个答案:

没有答案