В настоящее время я работаю над API, используя node и express.js. Для тестирования и покрытия кода я использую Jest, но у меня есть проблема: как я могу покрыть условный оператор, который зависит от узла env?
Пример:
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 отвечает мне, что я покрываю только «тестовый» случай, что нормально.
На самом деле я добавил /* istanbul ignore next */ за отсутствие сообщения о том, что я не покрываю все случаи.
Мой вопрос: есть способ охватить все случаи или можно отключить покрытие кода для этого оператора?





Вы можете издеваться над объектом config вручную.
index.ts:
function connectDatabase(config) {
switch (config.env) {
case 'development':
console.info('Connect to Dev DB');
break;
case 'test':
console.info('Connect to Test DB');
break;
default:
console.info('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.info node_modules/jest-mock/build/index.js:860
Connect to Dev DB
console.info node_modules/jest-mock/build/index.js:860
Connect to Test DB
console.info 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
Вы действительно хотите запустить свои тесты против производственной БД? чтобы покрыть строку, вам нужно ее запустить (и все, что связано, также будет работать с prod DB)