4

我对茉莉花相当陌生,想为下面的内容创建一个测试,我在测试部分创建了代码,但我得到“TypeError:无法设置未定义的属性'用户名'”..

我在 apps.js 中创建了一个全局命名空间“cp”,并在服务和控制器中使用了它。

//controller
cp.controller = {};
cp.controller.LoginController = function($scope, $location, $cookies){
        $scope.signIn = function(){
            $cookies.user = $scope.form.username;
            user.set($scope.form.username);
            $location.hash( "home" );
        }
};
//service 
cp.serviceFactory = {};
cp.serviceFactory.user = function user( $cookies){
    var userName = $cookies.user;
    return{
        set: function(name){
            userName = name;
        },
        get: function(){
            return userName;
        }
    }
};
//test script
describe('Cameo Controllers', function() {

    describe('LoginController', function(){
        var scope, cookies, ctrl, $httpBackend;
        beforeEach(module('CameoPaaS'));
        beforeEach(inject(function(_$httpBackend_, $rootScope, $controller, $cookies) {
            $httpBackend = _$httpBackend_;
           // cookies =  $cookies.username;
            scope = $rootScope.$new();
            cookies = scope.$cookies;
            ctrl = $controller(cp.controller.LoginController, {$scope: scope, $cookies: cookies});
        }));
        it('should log the user into the system', function() {
            expect(scope.username).toBeUndefined();
            scope.form.username = 'me';
            scope.signIn();
            //expect(user).toBe(undefined);
        });
    });
});

问题:如何在测试脚本中定义和设置 $cookies.username 的值来绕过错误。

4

2 回答 2

2

我也遇到了同样的问题,这是解决方法-

beforeEach(inject(function($cookies){
    $cookies.username = 'AngularJs'; 
}));

请建议是否有更好的方法。

于 2013-11-27T09:21:49.840 回答
2

首先确保您包含 angular-cookies.js,这些是从1.0.0rc3中的主发行版中分离出来的

如果是我,我会将 cookie 处理包装到服务中,然后使用 jasmine 模拟/监视您的 cookie 包装器服务实现。你可能会发现这篇文章很有帮助。另外,我在 unit 和 e2e 中发现了这个测试 cookie。恕我直言,问题在于它离金属太近,必须直接使用浏览器 cookie。

于 2012-10-14T00:18:39.540 回答