У меня есть AuthService
, который имеет зависимость от userService
, которая приходит из другого модуляЖасмин и AngularJS - Модульное тестирование высмеивали зависимость
Я пытаюсь написать модульный тест, который проверяет свойство userService
, который я издевались и включали использование службы $ provision в моей спецификации теста.
beforeEach(function() {
module('app.services');
//Need to provide userService since it lives in a different module
module(function ($provide) {
$provide.value('userService', function(){
return {
userLoggedIn: false
}
});
});
});
//Question - will injecting _userService_ pick up the mocked instance from above?
beforeEach(inject(function(_AuthService_, _userService_) {
authService = _AuthService_;
userService = _userService_;
}));
describe('some text', function() {
it('should make a get request to check the users token', function() {
$httpBackend.expectGET('/auth/checktoken').respond({});
authService.hasAccessToken();
$httpBackend.flush();
});
it('should set userService.userLoggedIn to be true', function() {
expect(userService.userLoggedIn).toBeTruthy();
});
});
Мое ожидание на моем сервисе пользователя не срабатывает, поскольку оно возвращается как неопределенное. Что мне нужно сделать, чтобы протестировать мои издевательства userService
?
Благодаря
UPDATE
ИТАК на основе замечаний, я могу получить его, чтобы передать организуя свои тесты, как так
describe('hasAccessToken', function() {
beforeEach(function(){
authService.hasAccessToken();
});
it('should make a get request to catalogues', function() {
$httpBackend.expectGET('/auth/checktoken').respond({});
$httpBackend.flush();
});
it('should set userService.userLoggedIn to be true', function() {
$httpBackend.expectGET('/auth/checktoken').respond({});
$httpBackend.flush();
expect(userService.userLoggedIn).toBeTruthy();
});
});
Как вы можете видеть, что я пытаюсь написать тест для expectGET и userService отдельно, это правильно? Просто кажется довольно многословным?
Is действие инъецирования authService, достаточное для установки userLoggedIn в true, или вам не хватает вызова? Что-то вроде authService.login (пользователь); –
Да, извините, я обновил свой фрагмент кода, поэтому есть более ранний тест, который вызывает вызов 'authService.hasAccessToken()', который устанавливает 'userService.userLoggedIn' значение true – mindparse
Метод beforeEach выполняется перед каждым тестом, и, как вы его знаете сбрасывает состояние userService. Вы можете поместить вызов hasAccessToken в свой метод beforeEach или вызвать его в каждом тесте по своему усмотрению. –