gpt4 book ai didi

node.js - 如何使用 test jest 覆盖依赖于 Node 环境的条件

转载 作者:太空宇宙 更新时间:2023-11-03 23:16:15 30 4
gpt4 key购买 nike

我目前正在使用 Node 和express.js 开发 API。对于测试和代码覆盖,我使用 Jest 但有一个问题:如何覆盖依赖于 Node 环境的条件语句?

示例:

switch (config.env) {
case "development":
// Connect to Dev DB
break;
case "test":
// Connect to Test DB
break;
default:
// Connect to Prod DB
break;
}

使用此代码,当我运行测试覆盖率(cross-env NODE_ENV=test ./node_modules/.bin/jest server/tests --coverage)时,Jest 回答我,我只覆盖“测试”案例,这是正常的。

实际上,我添加了 /* istanbulignore next */ 因为没有消息告诉我我没有涵盖所有情况。

我的问题是:有一种方法可以覆盖所有情况,或者可以禁用此语句的代码覆盖率吗?

最佳答案

您可以手动模拟config对象。

index.ts:

function connectDatabase(config) {
switch (config.env) {
case 'development':
console.log('Connect to Dev DB');
break;
case 'test':
console.log('Connect to Test DB');
break;
default:
console.log('Connect to Prod DB');
break;
}
}

export { connectDatabase };

单元测试:

import { connectDatabase } from './';

describe('test suites', () => {
const config1 = { env: 'development' };
const config2 = { env: 'test' };
const config3 = { env: 'prod' };
it.each`
config | name
${config1} | ${'Connect to Dev DB'}
${config2} | ${'Connect to Test DB'}
${config3} | ${'Connect to Prod DB'}
`(`$name`, ({ config, name }) => {
const consoleLogSpyOn = jest.spyOn(console, 'log');
connectDatabase(config);
expect(consoleLogSpyOn).toBeCalledWith(name);
});
});

单元测试结果与 100% 覆盖率报告:

 PASS  src/stackoverflow/55127764/index.spec.ts
test suites
✓ Connect to Dev DB (10ms)
✓ Connect to Test DB (1ms)
✓ Connect to Prod DB (1ms)

console.log node_modules/jest-mock/build/index.js:860
Connect to Dev DB

console.log node_modules/jest-mock/build/index.js:860
Connect to Test DB

console.log node_modules/jest-mock/build/index.js:860
Connect to Prod DB

----------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
----------|----------|----------|----------|----------|-------------------|
All files | 100 | 100 | 100 | 100 | |
index.ts | 100 | 100 | 100 | 100 | |
----------|----------|----------|----------|----------|-------------------|
Test Suites: 1 passed, 1 total
Tests: 3 passed, 3 total
Snapshots: 0 total
Time: 1.511s, estimated 4s

您可以在此处找到已完成的演示:https://github.com/mrdulin/jest-codelab/tree/master/src/stackoverflow/55127764

关于node.js - 如何使用 test jest 覆盖依赖于 Node 环境的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55127764/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com