Typescript 测试驱动开发 TDD (14)

发布时间 2023-09-22 14:58:59作者: 天涯上过客

返回值的监视器  (Spies returning values)

当我们希望模拟函数的返回值时,我们可以轻松地从模拟实现中返回一个值。作为示例,请考虑以下类:

1 class MyMockedClass {
2     functionToBeMocked(): number {
3          return 5;    
4     }
5 }

在这里,我们有一个名为MyMockedClass的类,它有一个名为functionToBeMocked的单个函数,返回值是5。我们可以通过以下方式用模拟实现来覆盖这个返回值:

1 it("should return value from mocked", () => {
2     let myMockedClass = new MyMockedClass();
3     jest.spyOn(myMockedClass, 'functionToBeMocked')
4          .mockImplementation((): number => {
5                return 10;
6          });
7 
8     expect(myMockedClass.functionToBeMocked()).toEqual(10);
9 });

在这里,我们的测试创建了一个名为myMockedClass的MyMockedClass实例,并对functionToBeMocked函数进行了间谍操作。我们模拟实现了这个函数,返回值为10。然后,我们的测试期望functionToBeMocked方法返回值为10。正如预期的那样,这个测试将通过,因为我们用返回值为10的模拟实现替换了原始方法实现中返回值为5的部分。

从模拟实现中返回值意味着我们可以在测试中模拟与其他系统的任何类型的外部交互。我们可以模拟对数据库或REST端点的调用,并注入标准值进行测试。