我有(我認爲)與js的一種獨特的問題。我正在使用量角器和Jasmine編寫測試,我需要在js文件之間共享數據。有沒有辦法做到這一點?我發現的所有解決方案都是針對網頁的,而我只使用js文件。如何在JavaScript文件之間共享數據?
我期待着您的迅速回復,如果缺少任何信息,請讓我知道,我會立即添加它。
我有(我認爲)與js的一種獨特的問題。我正在使用量角器和Jasmine編寫測試,我需要在js文件之間共享數據。有沒有辦法做到這一點?我發現的所有解決方案都是針對網頁的,而我只使用js文件。如何在JavaScript文件之間共享數據?
我期待着您的迅速回復,如果缺少任何信息,請讓我知道,我會立即添加它。
我沒有這個測試自己,但也許你可以嘗試把東西用在全球範圍內:
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
讓我知道,如果它的工作原理。
我喜歡它,簡單而有效的Andres !.好奇:爲什麼不使用'browser.params'而不是全局?例如,我實際上使用了兩種方法:'browser.params'用於不斷變化的共享測試配置數據,而'global.testState'則需要抓取運行的測試數據,例如元素的x,y位置以便測試其大小。 – 2014-09-25 16:39:44
安德烈斯,順便說一句,'量角器'標籤中有大量未解答的問題,希望你會更頻繁地出現並在這裏幫助。另外,我怎樣才能得到像你在聚會上穿的量角器T恤? :) – alecxe 2014-09-26 00:41:19
霍利莫莉,它確實工作。非常感謝!這種簡單的解決方案。 – 2014-09-26 07:06:20
在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
});
});
我在我宣佈我的變量我的配置JS文件包含在此用於量角器。在其他文件
(function() {
this.defaultPassword = function() {
return 'superPassword';
};
}());
用法是這樣的:
var userLogin = { 'Email': '[email protected]', 'Password': defaultPassword },
如果你需要共享文件之間的動態數據也可以做到以下幾點。 這是一個工作示例。我需要做的是拿走網址的一部分並在不同的文件中使用它們。
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;
});
@Nice和簡單的解決方案! – 2018-03-01 16:23:47
我還沒有使用量角器,但與業力和茉莉花,你可以使用requirejs共享數據。如果你想我可以提供一些更多的細節。 – kihu 2014-09-25 10:43:45
據我所知,我只能使用:量角器API,Selenium API,Jasmine,JS。這不是我的私人項目,所以不幸的是我不能使用其他的東西。除非,我瞭解你錯了,這是「內置」js。 @編輯:等等,你的意思是requirejs是內置於Jasmine中的?如果是的話,那麼一定要詳細說明。 – 2014-09-25 10:51:36
不,requirejs是一個分開的圖書館http://requirejs.org/ – kihu 2014-09-25 10:55:22