Ответ 1
Расскажите о каждой ошибке отдельно:
Ошибка: нет ожидающего запроса на сброс!
Это происходит потому, что через $httpBackend
не было сделано никаких запросов, поэтому ничего не нужно скрывать. Это потому, что вы создаете UserService
до $httpBackend
, и поэтому Angular не знает, что он должен использовать его вместо реального $http
. Если вы проверите консоль, вы увидите, что отправляется реальный запрос.
Ошибка: неудовлетворенные запросы: GET https://api.github.com/users/wilk
По той же причине, что и выше. Поскольку $httpBackend
не используется службой, ожидание, которое вы создали, никогда не выполняется.
Здесь ваш spec refactored после рассмотрения всего вышеперечисленного:
describe ('Service: UserService', function () {
var UserService,
GITHUB_API_URL,
GITHUB_USER,
$httpBackend;
beforeEach(function() {
module('plunker');
inject(function( _$httpBackend_, _UserService_, _GITHUB_API_URL_, _GITHUB_USER_) {
$httpBackend = _$httpBackend_;
UserService = _UserService_;
GITHUB_API_URL = _GITHUB_API_URL_;
GITHUB_USER = _GITHUB_USER_;
});
});
afterEach (function () {
$httpBackend.verifyNoOutstandingExpectation ();
$httpBackend.verifyNoOutstandingRequest ();
});
describe ('when populate method is called', function () {
it ('should returns user data', function () {
$httpBackend
.whenGET(GITHUB_API_URL + '/users/' + GITHUB_USER)
.respond ({
login: GITHUB_USER,
id: 618009
});
UserService.populate(GITHUB_USER);
$httpBackend.flush();
expect(UserService.data().login).toBe(GITHUB_USER);
expect(UserService.data().id).toBe(618009);
});
});
});
Примечание. Я изменил способ ввода данных немного, но то, что вы делаете, просто отлично, если вы создаете $httpBackend
перед всем остальным.