茉莉花 - 间谍方法

时间:2015-08-22 12:24:40

标签: jasmine karma-jasmine

我想在loginUser内测试服务电话LoginController。 如果loginUser是全局方法,那么现在没问题。

但我尝试在点击登录按钮后对其进行测试。

控制器

$scope.login = function () {

        UtilsFactory.showLoader();
        LoginService.loginUser($scope.data.username, $scope.data.password, false).success(function (data) {
            UtilsFactory.hideLoader();

            if ($scope.loginSuccessfull(data)) {
                $location.path('/tab');
            } else {
                UtilsFactory.hideLoader();
                UtilsFactory.popup('Login failed!', data.Message);
            }

        }).error(function (data) {
            UtilsFactory.hideLoader();
            UtilsFactory.popup('Login failed!', 'Login credentials failed!');
        });
    }

测试

描述("单位:登录控制器",function(){         var $ rootScope,$ scope,$ controller,LoginService;

    // load the controller's module
    beforeEach(module('starter'));

    beforeEach(inject(function (_$rootScope_, _$controller_, _LoginService_) {
        $rootScope = _$rootScope_;
        $scope = $rootScope.$new();
        $controller = _$controller_;
        LoginService = _LoginService_;

        $controller('LoginController', {
            '$rootScope': $rootScope,
            '$scope': $scope,
            'LoginService': LoginService
        });

    }));

//Success
    it("should call the login method on the LoginController", function () {
        spyOn($scope, "login");
        $scope.login();
        expect($scope.login).toHaveBeenCalled();
    });


//Fails
    it("calls the loginUser() function", function () {

        spyOn(LoginService, "loginUser");
        spyOn($scope, "login");
        $scope.login();
        expect(LoginService.loginUser).toHaveBeenCalled();
    });
});

我得到的错误是

calls the loginUser() function
Error: Expected a spy, but got undefined.

我理解为什么我会得到它,只是不知道如何解决它。

1 个答案:

答案 0 :(得分:1)

<!没有返回间谍,但用间谍替换了你的对象的方法。因此,spyOn变量获得spy,因为undefined再次没有返回任何内容,这就是您收到此错误的原因。相反,您应该将一个被间谍替换的方法传递给spyOn

expect