如何在 Protractor / AngularJS 测试中重复使用代码

10

我们的AngularJS应用程序有几个Protractor端到端测试,分布在多个JS文件中,并且它们非常有效。但是,在这些测试中有很多重复的代码,我们希望能够优化它。

例如,每次登录时,我们都需要点击文本元素,输入用户名和密码,然后单击回车键。现在,每个JS文件都有自己的登录函数副本,该函数在每个测试之前调用。

将这些重复的部分重构为模块,然后进行导入会很好。我已经搜寻了数小时,但没有找到一个好的解决方案。

我们该如何做?

2个回答

22

您可以创建 Node.js 模块,并将其包含在 Protractor 配置中。

login-helpers.js

exports.loginToPage = function () {
    //nodejs code to login
};

protractor.conf.js

exports.config = {
    //...
    onPrepare: function () {
        protractor.loginHelpers = require('./helpers/login-helpers.js');
    }
    //...
};

page.spec.js

it('should do smth', () => {
    protractor.loginHelpers.loginToPage()

    //expect(...).toBe(...);
});

4
你确定 login-helpers 不应该是 module.exports.loginToPage = function... 吗? - boatcoder
你能告诉我们为什么要将 loginToPage 函数绑定到 exports 上吗? - Blaise

1
我们的团队使用 Orchid-js 与 Jasmine 和 Protractor,它们旨在实现这一目的。 您的测试
Describe('Login user',require('../login.js'))("username","password");

login.js

module.exports = function(username,password){ 
    describe('login the user',function(){
        it('should login the user',function(){
            element(by.id('usernameField')).sendKeys(username);
            element(by.id('passwordField')).sendKeys(password);
            element(by.id('loginButton')).click();
        });
    });
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接