角度量角器如何测试具有重定向状态的点击

时间:2014-09-22 19:13:06

标签: angularjs protractor

要耐心,我是量角器的新手。

我有这段代码:

angular.module('my.users')
    .controller('SessionSigninController', ['$scope', '$rootScope', 'Users', '$state',
        function($scope, $rootScope, Users, $state) {
            $scope.user = {};
            $scope.errors = [];
            $scope.save = function() {
                Users.signin($scope.user).then(
                    function(data) { 
                        if(data.success){
                            $rootScope.$emit('loggedin',data.user);
                            return $state.go('home');
                        }
                        $scope.errors = data.errors;
                    }
                );
            };
        }
    ])

我正在测试它(绿色条):

describe('users :', function() {
    describe('register', function() {
        beforeEach(function() {
            browser.get('/#!/user/register');
        });
        it('btn should be disabled', function() {
            var btn = element(by.css('button.btn-primary'));
            expect(browser.isElementPresent(btn)).toBe(true);
            expect(btn.isEnabled()).toBe(false);
        });
        it('btn should be enabled', function() {
            var btn = element(by.css('button.btn-primary'));
            element(by.model('user.fullname')).sendKeys('test user');
            element(by.model('user.email')).sendKeys('test@etest.io');
            element(by.model('user.username')).sendKeys('testusere');
            element(by.model('user.password')).sendKeys('testsecret');
            element(by.model('user.password_confirmation')).sendKeys('testsecret');
            expect(browser.isElementPresent(btn)).toBe(true);
            expect(btn.isEnabled()).toBe(true);
            btn.click();
            expect(browser.getCurrentUrl()).toMatch(/\/#!/);

        });
    });

});
  1. 这是测试'重定向'回家的正确方法吗?
  2. 为什么即使表单无效(电子邮件唯一),测试也是绿色的?
  3. 有没有办法模拟测试?
  4. END UP (见回复)

    describe('users :', function() {
        describe('register', function() {
            beforeEach(function() {
                browser.get('/#!/user/register');
            });
            it('btn should be disabled', function() {
                var btn = element(by.css('button.btn-primary'));
                expect(browser.isElementPresent(btn)).toBe(true);
                expect(btn.isEnabled()).toBe(false);
            });
            it('btn should be enabled', function() {
                var random = ~~(Math.random() * 1000);
                var btn = element(by.css('button.btn-primary'));
                element(by.model('user.fullname')).sendKeys('test user');
                element(by.model('user.email')).sendKeys('test'+random+'@test.io');
                element(by.model('user.username')).sendKeys('testuser'+random);
                element(by.model('user.password')).sendKeys('testsecret');
                element(by.model('user.password_confirmation')).sendKeys('testsecret');
                expect(browser.isElementPresent(btn)).toBe(true);
                expect(btn.isEnabled()).toBe(true);
                btn.click();
                expect(browser.getCurrentUrl()).toMatch(/\/#!\/$/);
                var userMenu = element.all(by.css('ul.dropdown-menu li'));
                expect(userMenu.count()).toBe(3);
             });
        });
    
    });
    

1 个答案:

答案 0 :(得分:5)

我认为你的测试看起来不错。它很容易阅读。我建议添加一个额外的期望,以确保您实际上能够登录。检查标题或"注销"链接或登录后可见的任何内容。

您的测试通过了

中的正则表达式
expect(browser.getCurrentUrl()).toMatch(/\/#!/);

匹配'/#!/user/register'。尝试在最后添加一个美元符号:

expect(browser.getCurrentUrl()).toMatch(\/#!/$);