#angular #unit-testing #jasmine #karma-jasmine
#angular #модульное тестирование #jasmine #карма-жасмин
Вопрос:
Я пытаюсь создать модульное тестирование для сервиса, у меня есть служба импорта данных в файле спецификации.
Затем я вызываю метод beforeach.
providers: [
{ provide: dataservice}
],
Я получаю эту ошибку
TypeError: Cannot read property 'setNumber' of undefined
this.dataService.setNumber(null);
В соответствии с приведенным ниже пользователем, которого я добавил
const spyDataService = jasmine.createSpyObj('DataService', ['setNumber '])
перед каждым
Как избавиться от этой ошибки, я пытаюсь, как показано ниже, я получаю ошибку, и я изменил это на
it('should be create data service', () => {
expect(DataService).setNumber;
});
it('should be create data service', () => {
expect(service.setBCNumber).toHaveBeenCalledWith(null);
});
но все равно я получаю ту же ошибку.
Ответ №1:
Вы должны предоставить класс вместо экземпляра. если вы хотите предоставить экземпляр, вы должны использовать useValue
вот так:
{
provide: DataService,
useValue: dataServiceMock
}
Кроме того, ожидание относится к экземпляру, а не к классу, следовательно
expect(DataService).setNumber;
должно быть
expect(dataService.setNumber).toHaveBeenCalledWith(null);
Вам также необходимо установить dataServiceMock в макет экземпляра, как в примере:
let dataServiceMock: jasmine.SpyObj<DataService>;
beforeEach(() => {
const spyDataService = jasmine.createSpyObj('DataService', ['setNumber ']);
...
{
provide: DataService,
useValue: spyDataService
}
...
Я рекомендую вам официальный сайт angular для тестирования:
https://angular.io/guide/testing-services
Комментарии:
1. Привет @JFPicard Я назначил DataService после описания, подобного этому let service: DataService, и я вызываю это в методе, который является expect (service). setnumber но я получил некоторую ошибку свойство setnumber не существует для маршеров типа<DataService>
2. Отредактировал мой ответ
3. Спасибо за ответ, но я все равно получаю ту же ошибку, это то, что я даю в providers[{provide:DataService, useValue:{} }], и это ожидаемый код (service.setNumber). toHaveBeenCalledWith(null)
4. Это ошибка, которую я получаю.DataService.setNumber не является функцией
5. Вы предоставляете пустую реализацию с useValue:{ } Вы должны добавить реальную реализацию с функцией setNumber