我解决了单位测试登录angularJS

时间:2015-01-02 10:24:29

标签: javascript angularjs unit-testing

我的login.js代码是

var loginModule = angular.module('loginModule', [])
        .controller('LoginCtrl', function ($scope, $auth, $location) {
            if (!$auth.isAuthenticated()) {
                $scope.oneAtATime = true;
                $scope.login = function () {
                    $auth.login({userName: $scope.username, password: $scope.password, isEncript: false})
                            .then(function () {
                                console.log($auth.getMessage());
                            })
                            .catch(function (response) {
                                console.log(response);
                            });
                };
            }
            else {
                $location.path('/home');
            }

            $scope.status = 'true';

        });

和单元测试代码是

describe('login()', function() {

        it('should be able to handle login errors', function () {
            var user = {
                email: 'foo@bar.com',
                password: '1234',
                isEncript: false
            };

            this.$httpBackend.expectPOST('app/controller/apicall.php?serviceName=login').respond(200);

            this.$auth.login(user).then(angular.noop, function () {

            });

           this.$httpBackend.flush();

            expect(user.isEncript).toBe(false);
        });
    });

});

......................我得到的错误低于............... ........................

$auth login() should be able to handle login errors FAILED
    Error: Unexpected request: POST ../../controller/apicall.php?serviceName=login
    Expected POST /app/controller/apicall.php?serviceName=login

帮我解决如何解决这个错误。

2 个答案:

答案 0 :(得分:0)

正在调用

../../controller/apicall.php?serviceName=login

你可以解决这个问题,或者只是改变你的

this.$httpBackend.expectPOST('app/controller/apicall.php?serviceName=login').respond(200);

this.$httpBackend.expectPOST('../../controller/apicall.php?serviceName=login').respond(200);

那应该这样做。

答案 1 :(得分:0)

此错误表示您的$ auth服务向其他URL发送请求。 因此,首先您需要检查并测试您的$ auth服务,当您拨打“登录”时,该服务会是什么?方法

测试的更好方法是为$ auth服务设置单独的套件(在那里测试它与后端的交互方式)和LoginCtrl控制器(在这里你将模拟$ auth服务并仅测试控制器的行为)

您可以使用此plunker http://tinyurl.com/lv3gskf作为示例。 (我使用tinyurl.com,因为stackoverflow不允许在没有代码的情况下发布链接到plunker)

相关问题