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

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

然后,我在不同的测试中两次调用该存根方法。问题是,当我使用expect()对 spy 进行.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;
  });

最佳答案

const spy = spyOn(somethingService, "doSomething");spy.calls.reset();
这会将已经进行的调用重置为 spy 。这样,您可以在测试之间重用 spy 程序。另一种方法是将测试嵌套在另一个describe()中,然后也将beforeEach()放入其中。

关于javascript - 如何重置Jasmine中的 spy ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54419027/

10-12 01:14