Мы повторно используем многие вещи при разработке любого приложения. При работе с Jasmine обычно используются два источника: Jasmine Docs и Google. Несмотря на то, что мы ссылаемся на эти ресурсы, требуется много времени, чтобы получить то, что мы хотим, то есть правильный синтаксис с примером.

Чтобы не делать этого каждый раз, я включил несколько из них в качестве шпаргалки, которую можно использовать при необходимости.

  1. Создание шпионского объекта с помощью шпионских методов
mySpy = jasmine.createSpyObj('Contact', ['get','set']); 

2. Вызвать поддельный метод вместо реального.

mySpy.pickContact.and.callFake(function () {
  return {
    id: 10
  };
}); 

3. Вызвать шпионский метод и вернуть значение.

var contact = {
  id: 10
};
mySpy.pickContact.and.returnValue(contact);

4. Вызвать шпионский метод и вернуть асинхронное значение.

var contact = {
  id: 10
};
mySpy.pickContact.and.returnValue(asyncData(contact)); 

5. Установите шпион на существующий объект.

spyOn(Contact, 'get'); // Spy on 'get' method of Contact

6. Установить шпиона на собственность

spyOnProperty(Contact, 'name'); // Spy on 'name' property of Contact

7. Проверьте вызываемый шпионский метод.

expect(Contact.get).toHaveBeenCalled();      // Check if called
expect(Contact.set).not.toHaveBeenCalled();  // Check if not called

8. Вызывается метод проверки шпиона с определенными параметрами.

expect(Contact.get).toHaveBeenCalledWith('Ganesh', 'Gaitonde');

9. Проверьте количество звонков.

expect(mySpy.get.calls.count()).toBe(1, ‘one call’);

10. Проверьте последний звонок.

expect(mySpy.get.calls.mostRecent().args[1]).toEqual('getErr');

11. Сброс шпионских звонков

var myService = jasmine.createSpyObj('MyService', ['getId']);
myService.getId.calls.reset();

12. Переопределите глобальный шпион в локальном файле и сбросьте его после выполнения всех тестов.

...
const areArraysEqual = UvUtilService.areArraysEqual();
...
it('applyFilters should apply Filters', () => {
  ...
  expect(HomeService.filterCards).not.toHaveBeenCalled();
  UvUtilService.areArraysEqual.and.callFake(() => {
    return false;
  });
  expect(HomeService.filterCards).toHaveBeenCalled();
  ...
});
afterAll(() => {
  UvUtilService.areArraysEqual.and.callFake(() => {
    return areArraysEqual;
  });
});

13. fakeAsync() с tick() → Нет фактического вызова из файла спецификации

14. async() с fixture.whenStable() → Актуальный вызов из файла спецификации

Первоначально опубликовано на https://yuvi1422.blogspot.com 8 июля 2019 г.