J'ai un problème où j'ai mis en place un service simulé en tant qu'espion.
mockSelectionsService = jasmine.createSpyObj(['updateSelections']);
J'appelle ensuite cette méthode stub deux fois, à chaque fois dans un test différent. Le problème est que lorsque i expect()
l'espion avec .toHaveBeenCalledWith()
la méthode toHaveBeenCalledWith contient également les arguments qui lui ont été transmis lors du premier test, ce qui produit un faux positif lors de mon deuxième test.
Comment puis-je effacer/effacer/réinitialiser le spyObject pour mon prochain test afin qu'il ne le croie plus du tout appelé?
Initialisation des services/composants
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();
Cela réinitialise les appels déjà passés à l'espion. De cette façon, vous pouvez réutiliser l'espion entre les tests. L'autre façon serait d'imbriquer les tests dans une autre describe()
et d'y mettre également une beforeEach()
.
Le service factice avec la valeur de retour par défaut peut être défini dans beforeEach (), mais si vous souhaitez modifier la réponse du service factice plus tard, n'appelez pas fixture.detectChanges () dans beforEach, vous pouvez l'appeler dans chaque spécification après avoir appliqué requis modifications (le cas échéant), si vous souhaitez modifier la réponse du service factice dans une spécification spécifique, puis ajoutez-la à cette spécification avant fixture.detectChanges ()
beforeEach(() => {
serviceSpy = jasmine.createSpyObj('RealService', ['methodName']);
serviceSpy.methodName.and.returnValue(defaultResponse);
TestBed.configureTestingModule({
providers: [{provide: RealService, useValue: serviceSpy }],
...
})
...
fixture = TestBed.createComponent(MyComponent);
component = fixture.componentInstance;
// do not call fixture.detectChanges() here
});
it('test something with default mocked service response', () => {
fixture.detectChanges();
....
});
it('test something with a new mocked service response', () => {
serviceSpy.methodName.and.returnValue(newResponse);
fixture.detectChanges();
....
});