我有一个Node.js项目,我正在使用Jest进行测试.我有几个具有相同设置要求的测试文件.以前,所有这些测试都在一个文件中,所以我只有一个beforeAll(...)执行常见设置.现在,将测试分成多个文件,似乎我必须将该beforeAll(...)代码复制/粘贴到每个文件中.这似乎是不优雅的 - 有没有更好的方法来做到这一点,理想情况下,我可以只编写我的beforeAll(...)/设置逻辑一次,并从多个测试文件"需要"它?请注意,我的测试套件中还有其他测试不需要此设置功能,所以我不想让我的所有测试运行此设置(只是测试文件的特定子集).
ada*_*que 15
如果您使用的是Jest> = 20,则可能需要考虑为jest-environment需要此常见设置的测试创建自定义.这将是一个扩展或者一个模块jest-environment-node或jest-environment-jsdom和工具async setup(),async teardown()以及async runScript()为此设置工作.
然后,您可以@jest-environment my-custom-env向需要此设置的文件添加指令.
有关testEnvironment如何设置此内容的详细信息,请参阅Jest配置文档; 那里有一个简单的例子.
Kri*_*ont 15
我为此使用了一个简单的“测试挂钩”模式:
// This function wraps beforeAll and afterAll into a single RAII-like call.
// That makes the describe code further down easier to read and makes
// sure you don't forget the afterAll part. Can easily be shared between tests.
function useFakeServer() {
let server;
beforeAll(() => server = sinon.fakeServer.create());
afterAll(() => server.restore());
return () => server;
}
describe('Some scenario', () => {
const getServer = useFakeServer();
it('accesses the server', () => {
const server = getServer();
// Test as you normally would..
expect(server.requests[0]. /* ... */);
});
});
Run Code Online (Sandbox Code Playgroud)
Lou*_*eda 14
如果您需要在所有测试文件之前运行脚本,您可以使用globalSetup
此选项允许使用自定义全局设置模块,该模块导出在所有测试套件之前触发一次的异步函数。
在你的jest.config.js
//jest.config.js
module.exports = {
...
testTimeout: 20000,
globalSetup: "./setup.js"
};
Run Code Online (Sandbox Code Playgroud)
然后创建一个名为setup.js
// setup.js
module.exports = async () => {
console.log("I'll be called first before any test cases run");
//add in what you need to do here
};
Run Code Online (Sandbox Code Playgroud)
Mol*_*Ice 10
在某处创建一个函数,如下所示:
export function setupBeforeAndAfter(putParamsHereIfYouHaveAny) {
beforeAll(() => shared-before-all-code);
afterAll(() => shared-after-all-code);
beforeEach(() => shared-before-each-code);
afterEach(() => shared-after-each-code);
}
Run Code Online (Sandbox Code Playgroud)
然后只需在您手动编写这些函数的任何地方调用它即可:
describe('My test', () => {
setupBeforeAndAfter(putParamsHereIfYouHaveAny)
it('is amazing', () => {
// Stuff in setupBeforeAndAfter() will run before/after this test as appropriate
})
})
Run Code Online (Sandbox Code Playgroud)
您可以将beforeAll逻辑移至一个文件中并在 jest.config.jssetupFilesAfterEnv部分中引用它:
module.exports = {
...
setupFilesAfterEnv: ['<rootDir>/testHelper.ts'],
...
}
Run Code Online (Sandbox Code Playgroud)
https://jestjs.io/docs/en/configuration#setupfilesafterenv-array
| 归档时间: |
|
| 查看次数: |
5715 次 |
| 最近记录: |