2014-09-25 157 views
6

我有(我認爲)與js的一種獨特的問題。我正在使用量角器和Jasmine編寫測試,我需要在js文件之間共享數據。有沒有辦法做到這一點?我發現的所有解決方案都是針對網頁的,而我只使用js文件。如何在JavaScript文件之間共享數據?

我期待着您的迅速回復,如果缺少任何信息,請讓我知道,我會立即添加它。

+2

我還沒有使用量角器,但與業力和茉莉花,你可以使用requirejs共享數據。如果你想我可以提供一些更多的細節。 – kihu 2014-09-25 10:43:45

+0

據我所知,我只能使用:量角器API,Selenium API,Jasmine,JS。這不是我的私人項目,所以不幸的是我不能使用其他的東西。除非,我瞭解你錯了,這是「內置」js。 @編輯:等等,你的意思是requirejs是內置於Jasmine中的?如果是的話,那麼一定要詳細說明。 – 2014-09-25 10:51:36

+0

不,requirejs是一個分開的圖書館http://requirejs.org/ – kihu 2014-09-25 10:55:22

回答

6

我沒有這個測試自己,但也許你可以嘗試把東西用在全球範圍內:

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

我喜歡它,簡單而有效的Andres !.好奇:爲什麼不使用'browser.params'而不是全局?例如,我實際上使用了兩種方法:'browser.params'用於不斷變化的共享測試配置數據,而'global.testState'則需要抓取運行的測試數據,例如元素的x,y位置以便測試其大小。 – 2014-09-25 16:39:44

+0

安德烈斯,順便說一句,'量角器'標籤中有大量未解答的問題,希望你會更頻繁地出現並在這裏幫助。另外,我怎樣才能得到像你在聚會上穿的量角器T恤? :) – alecxe 2014-09-26 00:41:19

+0

霍利莫莉,它確實工作。非常感謝!這種簡單的解決方案。 – 2014-09-26 07:06:20

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 
    }); 
}); 
1

我在我宣佈我的變量我的配置JS文件包含在此用於量角器。在其他文件

(function() { 
    this.defaultPassword = function() { 
     return 'superPassword'; 
    }; 
}()); 

用法是這樣的:

var userLogin = { 'Email': '[email protected]', 'Password': defaultPassword }, 
1

如果你需要共享文件之間的動態數據也可以做到以下幾點。 這是一個工作示例。我需要做的是拿走網址的一部分並在不同的文件中使用它們。

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; 
    }); 
+0

@Nice和簡單的解決方案! – 2018-03-01 16:23:47