【发布时间】:2014-03-01 21:52:50
【问题描述】:
我正在使用 Jasmine 和 Karma 来测试我基于 Angular 构建的应用。
我要测试一个加载用户数据的服务,并且我正在使用 $httpBackend 来模拟响应。 但是,当我运行测试时,出现两个错误:
- 错误:没有待处理的刷新请求!
- 错误:未满足的请求:GET https://api.github.com/users/wilk
模块:
'use strict';
app.service ('UserService', ['$resource', '$q', 'GITHUB_API_URL', function ($resource, $q, GITHUB_API_URL) {
var userResource = $resource (GITHUB_API_URL + '/users/:user', {user: '@user'}) ,
userModel = {};
return {
data: function () {
return userModel;
} ,
populate: function (user) {
var deferred = $q.defer () ,
userRequest = userResource.get ({user: user});
$q
.when (userRequest.$promise)
.then (function (data) {
userModel = data;
deferred.resolve (data);
});
return deferred.promise;
}
};
}]);
测试:
'use strict';
describe ('Service: UserService', function () {
beforeEach (module ('myApp'));
var $appInjector = angular.injector (['myApp']) ,
UserService = $appInjector.get ('UserService') ,
GITHUB_API_URL = $appInjector.get ('GITHUB_API_URL') ,
GITHUB_USER = $appInjector.get ('GITHUB_USER') ,
$httpBackend;
beforeEach (inject (function ($injector) {
$httpBackend = $injector.get ('$httpBackend');
$httpBackend
.when ('GET', GITHUB_API_URL + '/users/' + GITHUB_USER)
.respond ({
login: GITHUB_USER ,
id: 618009
});
}));
afterEach (function () {
$httpBackend.verifyNoOutstandingExpectation ();
$httpBackend.verifyNoOutstandingRequest ();
});
describe ('when populate method is called', function () {
it ('should returns user data', function () {
$httpBackend.expectGET (GITHUB_API_URL + '/users/' + GITHUB_USER);
UserService.populate (GITHUB_USER);
$httpBackend.flush ();
expect(UserService.data ()).toEqual ({
login: GITHUB_USER ,
id: 618009
});
});
});
});
假设 GITHUB_API_URL 等于 'https://api.github.com/' 并且 GITHUB_USER 等于 'wilk'。
我正在使用 Karma-Jasmine 0.1.5 和 AngularJS 1.2.6(使用 Angular Mocks 和 Scenario 1.2.6)运行此测试。
这段代码有什么问题?
【问题讨论】:
-
我用你的代码创建了一个Plunker script,但我不知道 GITHUB_USER 是什么。你介意更新一下吗?
-
@MichaelBenford 这是一个常数,正如我提到的,它等于字符串 'wilk'。
-
我的错。没注意。
标签: angularjs unit-testing service jasmine karma-runner