Я сделал чрезвычайно простой сервис, чтобы проверить мое здравомыслие, когда дело доходит до тестирования. Вот оно:Ожидающая функция, которая будет вызываться на очень простом сервисе
(function() {
'use strict';
angular
.module('app')
.service('TestService', TestService);
function TestService() {
function foo() {
bar();
}
function bar() {
console.log('Hello world!');
}
return {
foo: foo,
bar: bar
};
}
}());
Так что ничего сложного здесь - Foo() вызывает бар(), который выводит простое сообщение «Hello World» на консоль. Мой тест для этого выглядит следующим образом:
(function() {
'use strict';
fdescribe('test.service',function() {
var testService;
beforeEach(module('app'));
beforeEach(inject(function(_TestService_) {
testService = _TestService_;
}));
describe('setup',function() {
it('should get the testService',function() {
expect(testService).not.toBe(undefined);
});
});
describe('foo()',function() {
fit('should call bar',function() {
spyOn(testService,'bar');
testService.foo();
expect(testService.bar).toHaveBeenCalled();
});
});
});
}());
Все, что я делаю здесь проверяя обув вызывает бар в обычном методе то есть шпионаж в баре. Но это дает мне ошибку:
Expected spy bar to have been called
Я потянув меня за волосы, пытаясь понять это, так как это не может быть что-то сложно - Что я принципиально делаю не так?
Спасибо!
одна вещь, которую я мог бы подозревать, что, когда вы пользователя .Service(), вы не должны возвращать объект, в противном случае использовать завод как angular.module («ABC») завод() –
Почему у вас есть подчеркивания по обе стороны от '_TestService_'? Мне никогда не приходилось делать что-либо подобное в моих тестах. – HankScorpio
@HankScorpio для удобства и ремонтопригодности http://stackoverflow.com/a/15318137/1230663 – br3w5