Angular Jest 测试并在一个测试套件中使用两个存根
Angular Jest test and using two stubs in one test-suite
我必须覆盖测试分支并且我需要使用两个存根,那么我该如何实现呢?
我尝试在 TestBed 中设置 myStubOne...
TestBed.configureTestingModule({
providers: [
{ provide: MyService, useValue myStubOne }
]
}).compileComponents()
然后在我的单测中更新它:
it("should work", () => {
Testbed.ovverideProvider(MyService, myStubTwo)
})
...但它不起作用。当我想在两个单独的测试中使用两个不同的存根时,我应该怎么做?
我想你可能有几个选择。首先,对服务的调用可能 mockImplementationOnce() 多次,因此每次 return 都有不同的值。您在同一文件中的测试按顺序 运行,因此您可以根据需要安排 return。
模拟实现可以使用参数(如果在原始调用中使用)来根据需要简单地 return 数据。 resolveOnce 等也可以提供帮助。
由于 Jest 运行s 并行测试,并且您正在使用该服务的存根来测试您的代码是否正常工作,您还可以将测试分隔在井名文件中。这将允许他们 运行 并行(提高测试速度)并且仍然将类似的测试组合在一起。
另一种选择是将 2 个块简单地放在同一个文件中,并在 2 个不同的描述块中包含完整的 beforeEach。
我必须覆盖测试分支并且我需要使用两个存根,那么我该如何实现呢?
我尝试在 TestBed 中设置 myStubOne...
TestBed.configureTestingModule({
providers: [
{ provide: MyService, useValue myStubOne }
]
}).compileComponents()
然后在我的单测中更新它:
it("should work", () => {
Testbed.ovverideProvider(MyService, myStubTwo)
})
...但它不起作用。当我想在两个单独的测试中使用两个不同的存根时,我应该怎么做?
我想你可能有几个选择。首先,对服务的调用可能 mockImplementationOnce() 多次,因此每次 return 都有不同的值。您在同一文件中的测试按顺序 运行,因此您可以根据需要安排 return。
模拟实现可以使用参数(如果在原始调用中使用)来根据需要简单地 return 数据。 resolveOnce 等也可以提供帮助。
由于 Jest 运行s 并行测试,并且您正在使用该服务的存根来测试您的代码是否正常工作,您还可以将测试分隔在井名文件中。这将允许他们 运行 并行(提高测试速度)并且仍然将类似的测试组合在一起。
另一种选择是将 2 个块简单地放在同一个文件中,并在 2 个不同的描述块中包含完整的 beforeEach。