Я розміщую цю відповідь, щоб звернутися до коментаря в коді OP @ Tri-Vuong - що було моєю основною причиною мого відвідування цієї сторінки:
Я хочу замінити шпигуна ... тут і зробити це трохи інакше
Жодна з відповідей на даний момент не стосується цього питання, тому я опублікую те, що дізнався, та також підсумую інші відповіді.
@Alissa правильно називається, коли вона пояснює , чому це погана ідея встановити isSpy
в false
- ефективно шпигувати шпигун , що стався в авто-демонтажі Жасміна більше не функціонують належним чином . Її рішення (розміщене в контексті OP та оновлене для Jasmine 2+) було таким:
beforeEach(() => {
var spyObj = spyOn(obj,'methodName').and.callFake(function(params){
})
})
it("should do the declared spy behavior", () => {
})
it("should do what it used to do", () => {
spyObj.and.callThrough();
})
it("should do something a little differently", () => {
spyObj.and.returnValue('NewValue');
})
Останній it
тест демонструє, як можна змінити поведінку існуючого шпигуна на щось інше, крім оригінальної поведінки: " and
-declare" нову поведінку на spyObj, що раніше зберігалася у змінній у beforeEach()
. Перший тест ілюструє мій варіант використання - я хотів, щоб шпигун поводився певною мірою для більшості тестів, але потім змінив його на кілька тестів пізніше.
Для більш ранніх версій жасмину, змініть відповідні виклики .andCallFake(
, .andCallThrough()
і .andReturnValue(
відповідно.