我们对Protractor进行了一系列相当大的端到端测试.我们遵循Page Object模式,这有助于我们保持测试的清洁和模块化.我们还有一套辅助功能,可以帮助我们遵循DRY原则.
问题:
单个规范可能需要多个页面对象和辅助模块.例如:
"use strict";
var helpers = require("./../../helpers/helpers.js");
var localStoragePage = require("./../../helpers/localStorage.js");
var sessionStoragePage = require("./../../helpers/sessionStorage.js");
var loginPage = require("./../../po/login.po.js");
var headerPage = require("./../../po/header.po.js");
var queuePage = require("./../../po/queue.po.js");
describe("Login functionality", function () {
beforeEach(function () {
browser.get("/#login");
localStoragePage.clear();
});
// ...
});
Run Code Online (Sandbox Code Playgroud)
您可以看到我们在每个require语句中都有遍历目录:./../...这是因为我们有一个specs目录,我们将规范和多个目录保存在由测试中的应用程序功能分组.
问题:
在Protractor中处理相对路径问题的规范方法是什么?
换句话说,我们想避免遍历树,进入导入模块.从基础应用程序目录下来会更加清晰.
尝试和想法:
有一篇关于解决这个问题的好文章:Node.js的本地require()路径更好,但我不确定在使用Protractor开发测试时哪一个选项是推荐的.
我们也尝试使用require.main构造路径,但它指向node_modules/protractor目录而不是我们的应用程序目录.
我试图在量角器上设置一个全局变量,用于所有描述块.
var glob = 'test';
describe('glob test', function () {
it('should set glob', function () {
browser.get('http://example.com/test');
browser.executeScript(function () {
window.glob = glob;
});
});
});
Run Code Online (Sandbox Code Playgroud)
但这会返回以下错误:
Message:
[firefox #2] UnknownError: glob is not defined
Run Code Online (Sandbox Code Playgroud)
我也看了这个问题:量角器angularJS全局变量
所以我试图以这种方式在conf.js中设置变量glob:
exports.config = {
...,
onPrepare: function () {
global.glob = 'test';
}
};
Run Code Online (Sandbox Code Playgroud)
仍然有同样的错误.
如何在量角器测试中添加正确的全局变量?