如何重置Jasmine中的间谍?

lor*_*ess 6 jasmine angular

我有一个问题,我已经将模拟服务设置为间谍。

 mockSelectionsService = jasmine.createSpyObj(['updateSelections']);
Run Code Online (Sandbox Code Playgroud)

然后,我两次在不同的测试中两次调用该存根方法。问题是,当我expect()使用.toHaveBeenCalledWith()toHaveBeenCalledWith方法的间谍还包含参数时,它是从第一个测试传递过来的,这在第二个测试中产生了误报。

我如何擦除/清除/重置spyObject以便进行下一次测试,以使其不再相信它被调用?

服务/组件的初始化

  beforeEach(() => {
    mockSelectionsService = jasmine.createSpyObj(['updateSelections']);

TestBed.configureTestingModule({
  declarations: [QuickSearchComponent, LoaderComponent, SearchComponent, SearchPipe, OrderByPipe],
  providers: [OrderByPipe, SearchPipe, SlicePipe, {provide: SelectionsService, useValue: mockSelectionsService}],
  imports: [FormsModule, HttpClientModule]
});


fixture = TestBed.createComponent(QuickSearchComponent);
component = fixture.componentInstance;
fixture.detectChanges();

fixture.componentInstance.templates = mockTemplates;
fixture.componentInstance.manufacturers = mockManufacturers;
Run Code Online (Sandbox Code Playgroud)

});

Yuv*_*til 11

类型 1:

var myService = jasmine.createSpyObj('MyService', ['updateSelections']);

myService.updateSelections.calls.reset();
Run Code Online (Sandbox Code Playgroud)


类型 2:

var myService = spyOn(MyService, 'updateSelections');

myService.updateSelections.calls.reset();
Run Code Online (Sandbox Code Playgroud)

注意:以上代码在 Jasmine 3.5 上测试


Jel*_*lle 7

const spy = spyOn(somethingService, "doSomething");

spy.calls.reset();

这将重置已经向间谍发出的呼叫。这样,您可以在测试之间重用间谍程序。另一种方法是将测试嵌套在另一个中describe(),也将其beforeEach()放入其中。

  • 在创建间谍对象时,您需要调用以下类似方法来重置模仿对象SelectSelectService.method.calls.reset();。 (2认同)