node.js - Node Js jest 测试用例
问题描述
我的服务文件中有一个条件
const RedisEnableCache = process.env.REDIS_ENABLE_CACHE || false
我的服务文件中有两种条件的代码,如何在我的测试用例中同时覆盖测试文件,即 true 和 false。我必须编写两个测试用例,一个条件为真,另一个条件为假。怎么做?
解决方案
这是单元测试解决方案:
index.ts
:
export function main() {
const RedisEnableCache = process.env.REDIS_ENABLE_CACHE || false;
if (RedisEnableCache === "true") {
console.log("enable redis cache");
} else {
console.log("disable redis cache");
}
}
index.spec.ts
:
import { main } from "./";
describe("main", () => {
const originalEnv = process.env.REDIS_ENABLE_CACHE;
afterAll(() => {
process.env.REDIS_ENABLE_CACHE = originalEnv;
jest.restoreAllMocks();
});
it("should enable", () => {
process.env.REDIS_ENABLE_CACHE = "true";
const logSpy = jest.spyOn(console, "log");
main();
expect(logSpy).toBeCalledWith("enable redis cache");
});
it("should disable", () => {
process.env.REDIS_ENABLE_CACHE = "false";
const logSpy = jest.spyOn(console, "log");
main();
expect(logSpy).toBeCalledWith("disable redis cache");
});
});
带有覆盖率报告的单元测试结果:
PASS src/stackoverflow/58948797/index.spec.ts
main
✓ should enable (13ms)
✓ should disable (1ms)
console.log node_modules/jest-mock/build/index.js:860
enable redis cache
console.log node_modules/jest-mock/build/index.js:860
disable redis cache
----------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
----------|----------|----------|----------|----------|-------------------|
All files | 100 | 75 | 100 | 100 | |
index.ts | 100 | 75 | 100 | 100 | 2 |
----------|----------|----------|----------|----------|-------------------|
Test Suites: 1 passed, 1 total
Tests: 2 passed, 2 total
Snapshots: 0 total
Time: 4.07s, estimated 9s
源代码:https ://github.com/mrdulin/jest-codelab/tree/master/src/stackoverflow/58948797
推荐阅读
- c# - 在 C# 中删除数据结构和释放内存的有效方法(垃圾收集)
- android - 如何在 Firestore 查询中使用 .whereEqualTo 并在其上使用 .startAt?
- mysql - SQL Select rows that do not have an association to a corresponding join table
- kubernetes - Add consul connect sidecar to pods of a kubernetes helm deployment
- javascript - 计算错误(javascript)
- .net-core - Azure Active Directory 单页应用程序基础结构
- vue.js - 如何使用 Vue.js 更新表格数据
- r - 显示运行单独 R 脚本的分类问卷的仪表板软件?
- php - 在 php 中对多语言站点使用 Gettext 不起作用
- r - R/Shiny 的 SelectInput "Selected" 不起作用