【发布时间】:2018-01-01 02:39:31
【问题描述】:
我想使用 jest 进行服务器单元测试(而不是 mocha+chai)。 有没有一种方法可以在所有测试开始(初始化目的)之前运行异步函数一次而不是每个测试文件?还有,是否有办法在所有测试完成后运行某些东西?
【问题讨论】:
标签: javascript jestjs
我想使用 jest 进行服务器单元测试(而不是 mocha+chai)。 有没有一种方法可以在所有测试开始(初始化目的)之前运行异步函数一次而不是每个测试文件?还有,是否有办法在所有测试完成后运行某些东西?
【问题讨论】:
标签: javascript jestjs
当你使用beforeAll函数在describe块之外然后给它分配async关键字就变得很容易了。
注意:我在这里使用的是 jest @27.4.3 版本
代码示例
import { getValuesFromAWSSecretManager } from '../../src/libs/secret_manager';
import quickbooksConfigFrom from '../../src/config/quickbooks';
const quickbooksConfig = quickbooksConfigFrom;
// calling the async beforeALL function to get values from AWS Secret Manager
beforeAll(async () => {
const secretData = await getValuesFromAWSSecretManager();
quickbooksConfig.clientId = secretData.QUICKBOOKS_CLIENT_ID;
quickbooksConfig.clientSecret = secretData.QUICKBOOKS_CLIENT_SECRET;
});
describe('Quickbooks config file should be defined', () => {
test('Quickbooks File should be exist', () => {
expect(quickbooksConfig).toBeDefined();
});
test('Quickbooks File should be exist and having values', () => {
expect(quickbooksConfig).toBeTruthy();
});
});
希望它能帮助并解决您的疑问,
您可能需要在每个文件中都这样做才能申请。
你可以先查看 jest beforeAll 文档from here
【讨论】:
此功能是在Jest's 22 version 中添加的,具有globalSetup 和globalTeardown 配置。
看看this的例子。
package.json(或jest.config.js)
{
...
"jest": {
"globalSetup": "./scripts/jestGlobalSetup.js"
}
}
/scripts/jestGlobalSetup.js
module.exports = async () => {
console.log('\nhello, this is just before tests start running');
};
或
export default async () => {
console.log('\nhello, this is just before tests start running');
};
【讨论】:
jest 在新版本中为全局设置和拆卸提供了选项。您可以为导出异步函数的设置和拆卸创建文件,并像这样在开玩笑的配置中提供该路径。
"globalSetup": "setup-file-path",
"globalTeardown": "tear-down-file-path"
您可以进一步阅读here
【讨论】:
【讨论】:
beforeAll 听起来很棒,尤其是回复:Promises “如果函数返回一个 Promise 或者是一个生成器,Jest 在运行测试之前等待该 Promise 解决。”茉莉花有同等的吗?看起来 Jasmine 不 支持 Promises,但 does support a done callback approach? 我专门使用 Protractor,但 done 回调对我不起作用 as described here,
beforeAll 中使用done() 的文档?我只能发现它在等待promise
如果您使用 npm 执行 jest 测试,您可以在执行其他命令之前运行任何节点命令或任何可执行文件
"scripts": {
"test": "node setup.js && jest"
}
所以现在你可以用命令来运行它
$ npm t
【讨论】:
--watch 模式下运行。有什么 Jest 解决方案吗?