&引用;“未满足的要求”;用茉莉花测试angularJS时
如果用户使用正确的登录/通过,我将尝试编写哪些测试:&引用;“未满足的要求”;用茉莉花测试angularJS时,angularjs,jasmine,karma-jasmine,httpbackend,Angularjs,Jasmine,Karma Jasmine,Httpbackend,如果用户使用正确的登录/通过,我将尝试编写哪些测试: describe('LoginController', function () { beforeEach(angular.mock.module('task6')); var $rootScope, $controller, LoginService, $httpBackend, $resource, $scope,
describe('LoginController', function () {
beforeEach(angular.mock.module('task6'));
var $rootScope,
$controller,
LoginService,
$httpBackend,
$resource,
$scope,
$controller;
afterEach(function () {
$httpBackend.verifyNoOutstandingExpectation();
$httpBackend.verifyNoOutstandingRequest();
});
beforeEach(inject(function (_$rootScope_,
_$controller_,
_LoginService_,
_$httpBackend_,
_$resource_) {
$rootScope = _$rootScope_;
$controller = _$controller_;
LoginService = _LoginService_;
$httpBackend = _$httpBackend_;
$resource = _$resource_;
$scope = $rootScope.$new();
controller = $controller('LoginController', {
$scope: $scope
});
}));
describe('LoginController.submitLogin', function () {
var user = [
{
"login": "root",
"password": "1234"
}
];
it('tries to login with right login/pass', function () {
$httpBackend.expectGET(/users.json/)
.respond(200, user);
controller.loginField = 'John';
controller.password = 'Smith';
controller.submitLoginForm()
.then(function () {
expect($rootScope.logged).toBe(false);
})
.catch(function () {
console.log.bind(console);
});
$httpBackend.flush();
});
it('tries to login with right login/pass', function () {
$httpBackend.expectGET(/users.json/)
.respond(200, user);
controller.loginField = 'root';
controller.password = '1234';
controller.submitLoginForm()
.then(function () {
expect($rootScope.logged).toBe(true);
})
.catch(function () {
console.log.bind(console);
});
$httpBackend.flush();
});
});
});
下面是我在测试中使用的函数。在控制器中:
self.submitLoginForm = function() {
return LoginService.signIn(self.loginField, self.password)
.then(function() {
if(!$rootScope.logged) {
self.loginError = true;
}
})
.catch(console.log.bind(console));
};
在服务中:
var UsersResource = $resource('assets/data/users.json');
function getUsers() {
$httpBackend.expectGET(/users.json/);
return UsersResource.query().$promise;
}
function signIn(loginField, password) {
return getUsers()
.then(function(users) {
for (var i = 0; i < users.length; i++) {
if (users[i].login == loginField && users[i].password == password) {
$rootScope.logged = true;
$rootScope.user = users[i].login;
$location.path('/courses');
return true;
}
}
return false;
})
.catch(function () {
console.log("Error: Users array wasn't retrieved from the server");
});
}
var UsersResource=$resource('assets/data/users.json');
函数getUsers(){
$httpBackend.expectGET(/users.json/);
返回UsersResource.query().$promise;
}
功能登录(登录字段、密码){
返回getUsers()
.then(功能(用户){
对于(var i=0;i
测试工作正常,直到成功结束,否则将失败并出现错误:
错误:未满足的请求:GET/users.json/
第一个指向第59行和第13行,第二个指向第77行和第13行
谢谢大家! 所以,问题出在这个函数中:
function getUsers() {
$httpBackend.expectGET(/users.json/);
return UsersResource.query().$promise;
}
因为我在这个函数和测试中都需要请求,所以它需要两个请求,而第二个请求从未发出过$httpBackend.flush()
注意到了这一点,因此,$httpBackend.verifyNoOutstandingExpectation()
也注意到了这一点