作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的 AngularJS 应用程序中,我无法弄清楚如何对 then promise 的执行更改 location.url 进行单元测试。我有一个函数,登录 ,调用服务,身份验证服务 .它返回 promise ,然后 promise 的执行会改变 location.url。
这是 Controller 认证控制 :
angular
.module('bloc1App')
.controller('AuthCtrl', ['$scope', '$http','$location', 'AuthenticationService',
function($scope, $http, $location, AuthenticationService) {
this.AuthenticationService = AuthenticationService;
var self = this;
$scope.login = function(username, password){
self.AuthenticationService
.login(username, password)
.then(function(){
$location.url('/tasks');
});
};
}
]);
describe('Controller: AuthCtrl', function () {
var scope,
location,
route,
q,
rootScope,
AuthCtrl;
beforeEach(module('bloc1App'));
beforeEach(inject(function($controller, $rootScope, $location, $route, $q) {
scope = $rootScope.$new();
q = $q;
rootScope = $rootScope;
location = $location;
route = $route;
AuthCtrl = $controller('AuthCtrl', {
$scope: scope,
$route: route,
$location: location
});
}));
it('login should redirect user to tasks view', function(){
var deferred = q.defer();
spyOn(AuthCtrl.AuthenticationService, 'login').andReturn(deferred.promise);
spyOn(location, 'url');
scope.login('foo', 'foo');
deferred.resolve();
scope.$apply();
expect(location.url).toHaveBeenCalledWith('/tasks');
});
});
Error: Unexpected request: GET views/AuthView.html
No more request expected
Expected spy url to have been called with [ '/tasks' ] but it was never called.
最佳答案
当您使用 AngularJS 进行单元测试时,您实际上是在使用来自 ngMock
的模拟服务。模块而不是真正的服务。在这种情况下,您的错误可能来自 $httpBackend
模拟,如果您希望测试单元使用 $http
,则必须首先“启动”发送真实的请求。 (我在任何地方都没有看到您使用 $http
的代码,所以我猜这里有一部分您没有显示。)
基本上,你需要告诉 $httpBackend
使用 $httpBackend.when
模拟您期待特定请求(或者您可以使用 $httpBackend.expect
,如果您希望模拟检查请求是否真的被调用)以及应该返回什么响应。
因此,您的错误与 promise 无关,而与连接到服务器的测试单元有关。
关于AngularJS 错误 : Unexpected request (No more requests expected),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27471016/
我是一名优秀的程序员,十分优秀!