【问题标题】:Protractor - How to separate each test to one file and separate variabiles量角器 - 如何将每个测试分离到一个文件并分离变量
【发布时间】:2015-03-17 23:57:42
【问题描述】:

我编写了一些复杂的量角器测试,但所有内容都在一个文件中。 我在上面加载所有变量,例如:

var userLogin = "John"; 

然后我在代码中的某个地方一起使用它。

我需要做的是 1.将所有变量分离到附加文件(一些配置文件) 2.每个测试一个文件

1- 我尝试在 config.js 中添加所有变量,并在 protractor.conf.js 中要求它正确加载问题是,当我在某些测试中使用这些变量中的任何一个时,它都不起作用(测试失败“未定义用户名”) 我知道有一种方法可以在每个测试脚本中使用 config.file,但在我看来这真的不是最好的选择。

2- 如果上一个脚本是单独的,我如何知道我在上一个脚本中做了什么,例如如何知道我已登录?

谢谢。

【问题讨论】:

    标签: testing protractor end-to-end


    【解决方案1】:

    您可以使用多种东西。

    2) 如果上一个脚本是单独的,我如何知道我在上一个脚本中做了什么,例如如何知道我已登录?

    这是beforeEach(), afterEach() 可以提供帮助的地方:

    为了帮助测试套件干燥所有重复的设置和拆卸代码, Jasmine 提供了全局的 beforeEach 和 afterEach 函数。作为 顾名思义, beforeEach 函数在每个规范之前调用一次 在 describe 中运行,并且 afterEach 函数被调用一次 在每个规范之后。

    还有beforeAll(), afterAll() available in jasmine 2,或者通过jasmine-beforeAll第三方jasmine 1:

    beforeAll 函数在所有规范之前只调用一次 describe 运行,并且在所有规范之后调用 afterAll 函数 结束。这些功能可用于加速测试套件 昂贵的设置和拆卸。


    1) 我尝试在 config.js 中添加所有变量并且我需要 它在 protractor.conf.js 它正确加载问题是当我使用 某些测试中的任何这些变量都不起作用(测试失败 “未定义用户名”)我知道有一种方法我需要 config.file 在每个测试脚本中,但这真的不是最好的选择 我的眼睛。

    我个人使用的一个选项是创建一个config.js 文件,其中包含您在多个测试中需要的所有可重用配置变量,并且需要该文件一次 - 在量角器配置中 -然后将其设置为params 配置键值:

    var config = require("./config.js");
    exports.config = {
        ...
    
        params: config,
    
        ...
    };
    

    config.js 在哪里,例如:

    var config;
    config = {
        user: {
            login: "user",
            password: "password"
        }
    };
    
    module.exports = config;
    

    那么,您不需要在每个测试中都要求config.js,而是使用browser.params。例如:

    expect(browser.params.user.login).toEqual("user");
    

    另外,如果您需要某种全局测试准备步骤,您可以在onPrepare() 函数中进行,请参阅Setting Up the System Under Testhere 提供了执行“全局”登录步骤的示例配置。

    另一个快速说明:您可以自定义全局定义变量(如内置browserprotractor),使用onPrepare 中的global 设置它们。例如,我将protractor.ExpectedConditions 定义为自定义全局变量:

    onPrepare: function () {
        global.EC = protractor.ExpectedConditions;
    }
    

    然后,在测试中,不需要任何东西,`EC 变量将在范围内可用,例如:

    browser.wait(EC.invisibilityOf(scope.page.dropdown), 5000)
    

    此外,使用"Page Object Pattern" 组织测试也有助于解决可重用性和模块化问题。

    【讨论】:

    • 谢谢@alecxe,一如既往的好回答。明天我会试试你的建议。但是现在看起来真的很棒
    • @Andurit 谢谢,抱歉,信息可能太多了。只是想尽可能多地指出相关性。
    猜你喜欢
    • 1970-01-01
    • 2017-08-27
    • 2023-03-11
    • 1970-01-01
    • 2023-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多