玩笑globalSetup选项不起作用

the*_*ben 5 unit-testing jestjs

我正在尝试使一个名为loadFixtures的函数可用于所有Jest测试。

我在package.json内的jest config对象内有以下一行:

"globalSetup": "<rootDir>/src/test/js/config/setup-globals.js"
Run Code Online (Sandbox Code Playgroud)

setup-globals.js包含:

module.exports = function() {
    function loadFixtures(filename) {
        console.info('loadFixtures is working');
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的测试中,例如:

beforeEach(() => {
    loadFixtures('tooltip-fixture.html');
});
Run Code Online (Sandbox Code Playgroud)

但是,当我运行Jest时,每次测试都会得到以下结果:

ReferenceError: loadFixtures is not defined
Run Code Online (Sandbox Code Playgroud)

我验证了Jest在执行测试之前肯定已找到setup-globals.js文件并将其加载。

谁能协助您确定我在哪里出了问题?我花了整整一天的时间尝试调试,但没有运气。

Goo*_*dea 5

您应该使用setupFiles而不是globalSetup

// jest config
"setupFiles": [
  "<rootDir>/src/test/js/config/setup-globals.js"
]
Run Code Online (Sandbox Code Playgroud)

然后src/test/js/config/setup-globals.js

global.loadFixtures(filename) {
  console.info('loadFixtures is working');
}
Run Code Online (Sandbox Code Playgroud)

参考:https : //medium.com/@justintulk/how-to-mock-an-external-library-in-jest-140ac7b210c2


Adé*_*gun 5

如果您使用npx create-react-app(CRA)引导应用程序,则无需在文件中的setupFiles密钥下添加密钥(CRA 可防止覆盖该密钥)。jestpackage.json

您只需要做的是将文件添加到文件夹setupTests.js的根SRC目录中,并使用以下代码段填充它:


import { configure } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';

configure({
  adapter: new Adapter(),
});
Run Code Online (Sandbox Code Playgroud)

请记住,您之前必须安装了正确版本的enzymeenzyme-adapter-react

CRA 已连接到自动加载setupTests.js文件src夹中的文件(如果存在)。因此,在添加这些之后,您可以继续进行测试并且import {shallow} from enzyme不会触发错误。

如果您不使用Create-react-app,除了将上面的src文件添加到您的文件夹之外,您需要做的就是将密钥添加setupFilesjest您的 package.json 中的密钥中。它应该是这样的:

"jest": {
    "setupFiles": ['<rootDir>/src/setupTests.js'],
  }
Run Code Online (Sandbox Code Playgroud)

你很高兴去。

干杯!