&引用;“未满足的要求”;用茉莉花测试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()
也注意到了这一点