我正在使用五模来嘲弄,到目前为止,除了一些怪癖之外,一切正常。
我使用autoSpy自动监视每个方法,所以我不必手动监视函数。所以根据文档,我在我的test.ts里
ngMocks.autoSpy('jasmine');我可以用间谍的方法来测试。例如,我有这样的东西:
// in the main beforeEach() while setting up TestBed
myService: MyService = MockService(MyService);
describe(`When button A is clicked`, () => {
beforeEach(() => {
//button click code here
});
it(`Should call functionA one time`, () => {
expect(myService.functionA).toHaveBeenCalled(); // This works ok
});
});
// Further down in the same file
describe(`When button B is clicked`, () => {
beforeEach(() => {
//button click code here
ngMocks.reset(); // I don't think this does what I think it does
});
it(`Should NOT call functionA`, () => {
expect(myService.functionA).not.toHaveBeenCalled(); // This DOES NOT work.
});
});第二次,我试着测试这个函数不是用不同的按钮调用的,但是间谍计数了之前的调用,但是失败了。如果我只使用jit运行这个测试,那么它就通过了。或者,如果我将这个测试用例移到第一个测试用例之上,那么它就能工作了。我不能只做mySpy.calls.reset(),因为我没有手动指派间谍。我尝试过myService.functionA.calls.reset(),但是有一个错误-- functoinA没有calls方法,因为它没有被识别为间谍。
此外,如果我将调试器放在我的expect.not.toHaveBeenCalled()前面,并通过chrome窗口进行检查,我可以在控制台上运行这个myService.functionA.calls.reset(),然后它就可以正常工作了。
我该如何重设ng-mocks中的所有间谍电话?
发布于 2022-11-26 09:44:02
当一个函数/方法应该被模拟时,ngMocks.autoSpy('jasmine');只会调用jasmine.createSpy。
这意味着您不需要重置它,因为每个测试都有自己的对象,因此也有自己的新间谍。
如果您的主beforeEach已经包含了MockService,则不应该进行任何额外的操作。它为服务创建了一个新的模拟。
// in the main beforeEach() while setting up TestBed
const myService = MockService(MyService);您只需删除ngMocks.reset();
describe('root suite', () => {
// in the main beforeEach() while setting up TestBed
let myService: MyService
beforeEach(() => myService = MockService(MyService));
describe(`When button A is clicked`, () => {
beforeEach(() => {
//button click code here
});
it(`Should call functionA one time`, () => {
expect(myService.functionA).toHaveBeenCalled(); // This works ok
});
});
// Further down in the same file
describe(`When button B is clicked`, () => {
beforeEach(() => {
//button click code here
});
it(`Should NOT call functionA`, () => {
expect(myService.functionA).not.toHaveBeenCalled(); // This DOES NOT work.
});
});
});上面的代码确保每个测试都有自己新的MyService实例,这些实例都是未接触的间谍。
不过,您可以将现有间谍重置为任何其他茉莉间谍:
(myService.functionA as jasmine.Spy).calls.reset();发布于 2022-11-25 16:54:29
我从未使用ng-模拟,但我查看了它们的文档和存储库。你试过使用ngMock.autoSpy('reset')吗?
传递重置应该删除最后一个模拟,因此,如果您执行以下操作:
beforeEach(() => {
ngMocks.autoSpy('jasmine');
});
.
.
.
afterEach(() => {
ngMocks.autoSpy('reset');
});也许能解决你的问题。
https://stackoverflow.com/questions/74575655
复制相似问题