首页 > 解决方案 > Node Js jest 测试用例

问题描述

我的服务文件中有一个条件

const RedisEnableCache = process.env.REDIS_ENABLE_CACHE || false

我的服务文件中有两种条件的代码,如何在我的测试用例中同时覆盖测试文件,即 true 和 false。我必须编写两个测试用例,一个条件为真,另一个条件为假。怎么做?

标签: node.jsjestjstestcase

解决方案


这是单元测试解决方案:

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


推荐阅读