我(我认为)有点js的独特问题。我正在使用量角器和Jasmine编写测试,我需要在js文件之间共享数据。有没有办法做到这一点?我发现的所有解决方案都适用于网页,我只使用js文件。
我期待您的迅速回复,如果有任何信息丢失,请告诉我,我会立即添加。
答案 0 :(得分:7)
我自己没有对此进行测试,但也许您可以尝试使用以下方法将内容放入全局范围:
global.mySharedData = {someKey: 'some value'}
// in one of your test files
it('should do something', function() {
global.mySharedData = {someKey: 'some value'}
});
...
// This is in another test suite
it('should do something', function() {
var valueFromFirstTest = global.mySharedData.someKey;
});
http://nodejs.org/api/globals.html
让我知道它是否有效。
答案 1 :(得分:1)
有一种简单的方法可以在Protractor
规范JavaScript文件之间共享数据甚至功能。它们以node.js
运行,内置方式来定义模块并使用和重用它们 - http://nodejs.org/docs/latest/api/modules.html。
假设以下文件夹的结构:
o e2e
|-- utils.js
|-- a-spec.js
|-- b-spec.js
在utils.js
:
exports.sharedData = { num: 42, str: 'hi' };
exports.foo = function (x) { return x + 1; };
在a-spec.js
:
var utils = require('./utils.js'); // Note './'
describe("The a page", function () {
it("should give the ultimative answer", function () {
expect(element(by.binding("answer")).getTest())
.toBe(utils.sharedData.num); // Using shared data
});
});
答案 2 :(得分:1)
我将其包含在我的配置js文件中,其中我声明了我的变量for protractor。
(function () {
this.defaultPassword = function () {
return 'superPassword';
};
}());
其他文件中的用法如下:
var userLogin = { 'Email': 'something@gmail.com', 'Password': defaultPassword },
答案 3 :(得分:1)
如果您需要在文件之间共享动态数据,您还可以执行以下操作。 这是一个有效的例子。我需要做的是获取部分URL并在不同文件中使用它们。
it('should click on one of the clickable profiles', function(){
//Get entity type and entity id before clicking the link
tableEls.get(1).all( by.xpath('./td') ).get(0).element( by.xpath('./a') ).getAttribute('href').then(function(text){
var hrefTokens = text.split('/');
var entityID = hrefTokens[ hrefTokens.length - 1 ];
var entityType = hrefTokens[ hrefTokens.length - 2 ];
browser.params.entityID = entityID;
browser.params.entityType = entityType;
});
tableEls.get(1).all( by.xpath('./td') ).get(0).element( by.xpath('./a') ).click();
browser.sleep(2000);
});
我只是将我需要在其他文件中使用的值分配给browser.params
。所以在我的其他文件中,我可以像这样访问它们
it('Retrieving JSON Data ...', function(){
var entityID = browser.params.entityID;
var entityType = browser.params.entityType;
});