Jest.js if-else条件的每个场景的测试用例

hm2xizp9  于 2023-09-28  发布在  Jest
关注(0)|答案(1)|浏览(162)
rateTermCalc() {
    if (this.termYearsDiff(this.remainingDays, 1, 182)) {
      this.termText = '6 months';
    } else if (this.termYearsDiff(this.remainingDays, 183, 365)) {
      this.termText = '1 year';
    } else if (this.termYearsDiff(this.remainingDays, 366, 730)) {
      this.termText = '2 years';
    } else if (this.termYearsDiff(this.remainingDays, 731, 1095)) {
      this.termText = '3 years';
    } else if (this.termYearsDiff(this.remainingDays, 1096, 1460)) {
      this.termText = '4 years';
    } else if (this.termYearsDiff(this.remainingDays, 1461, 1825)) {
      this.termText = '5 years';
    } else if (this.termYearsDiff(this.remainingDays, 1826, 2555)) {
      this.termText = '7 years';
    } else 
    this.termText = '10 years';
  }

  termYearsDiff(x: number, min: number, max: number): boolean {
    return x >= min && x <= max;
  }

我正在尝试用Angular为上述函数编写Jest单元测试用例。如何使用it.each进行编程?

4urapxun

4urapxun1#

你会这样做:

describe('rateTermCalc', () => {
  let component: YourComponentClass; // replace with the actual name of your class

  beforeEach(() => {
    component = new YourComponentClass();
    // If you can spy on termYearsDiff, do so here. Otherwise, you might need to refactor your code.
    jest.spyOn(component, 'termYearsDiff').mockImplementation((x, min, max) => x >= min && x <= max);
  });

  it.each([
    [181, '6 months'],
    [183, '1 year'],
    [365, '1 year'],
    [366, '2 years'],
    [730, '2 years'],
    [731, '3 years'],
    [1095, '3 years'],
    [1096, '4 years'],
    [1460, '4 years'],
    [1461, '5 years'],
    [1825, '5 years'],
    [1826, '7 years'],
    [2555, '7 years'],
    [2556, '10 years'],
  ])('should set termText correctly for remainingDays %i', (remainingDays, expectedTermText) => {
    component.remainingDays = remainingDays;
    component.rateTermCalc();
    expect(component.termText).toBe(expectedTermText);
  });
});

我所做的事情的分解:
步骤1.模拟termYearsDiff函数:由于termYearsDiff是同一个类的方法,我不认为你可以轻松地监视它(可能是错误的..我的Angular 间谍知识是生 rust 的最好),但让我们假设你可以。如果没有,您可能需要重构代码,使其更具可测试性。
步骤2.设置测试表:对于it.each,您将建立一个表,其中每行代表一个测试用例。每行将包含:

  • this.remainingDays的值。
  • this.termText的期望值。

第三步:编写测试:对于每个测试用例,您将设置this.remainingDays的值,调用rateTermCalc,然后检查this.termText是否与预期值匹配。

  • 注意:* 我主要是用你提供的伪代码......没有在本地或编辑器中运行这个,因为如果没有你完整的termYearDiff代码,它只会在我的错误中出错,我不能完全 Flink termYearDiff算法,但对它的作用有大致的了解,我懒得为此编写我的脚手架代码......但如果你提供更多细节,我们可以得到一个工作示例。

相关问题