如何在javascript文件之间共享数据?

时间:2014-09-25 10:29:47

标签: javascript jasmine protractor

我(我认为)有点js的独特问题。我正在使用量角器和Jasmine编写测试,我需要在js文件之间共享数据。有没有办法做到这一点?我发现的所有解决方案都适用于网页,我只使用js文件。

我期待您的迅速回复,如果有任何信息丢失,请告诉我,我会立即添加。

4 个答案:

答案 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;
   });