2015-10-12 1 views
2

Я хотел бы вызвать функцию без указания имени файла .js, где эта функция хранится.JavaScript - как напрямую вызвать функцию из .js-файла без предоставления ссылки

В helpers.js файле имеют функцию, как это (это не единственная функция в этом файле):

exports.clickOn = function (element) { 
    browser.wait(EC.presenceOf(element), waitTimeout).then(function() { 
     browser.wait(EC.visibilityOf(element), waitTimeout) 
    }).then(function() { 
     element.click(); 
    }); 
}; 

var EC = protractor.ExpectedConditions; 
var waitTimeout = 10000; 

Функция вызывается в spec.js файл в следующим образом:

var InitPage = require('../pages/init_page.js'); 
var LogInToSystem = require('../helper.methods/test_with_system_authentication'); 
var Helpers = require('../helper.methods/helpers.js'); 

describe('Test -> my test', function() { 
    var EC = protractor.ExpectedConditions; 
    var waitTimeout = 10000; 
    var helper = Helpers; 
    beforeEach(function() { 
     LogInToSystem.AsAdmin(); 
     var initPage = new InitPage; 
     helper.clickOn(initPage.usersButton); 
    }); 

Я хотел бы позвонить clickOn функции без helper. - только clickOn(initPage.usersButton); - в java Я мог бы просто импортировать статический этот точный метод, но js не позволяет на нем. Может ли кто-нибудь посоветовать, как?

+2

You не может этого сделать. Javascript - это не Java. Javascript анализирует и компилирует все в файле. почему ты хочешь сделать это? Если вы объясните свою мотивацию, может быть другой способ. –

+0

Почему вы не можете включить его? –

ответ

1

Поскольку это protractor -специфический, вы можете сделать функцию доступной глобально с помощью global:

onPrepare: function() { 
    var helpers = require('../helper.methods/helpers.js'); 
    global.clickOn = helpers.clickOn; 

    // ... 
}, 
1

Что вы хотите, это в основном отключить пространство имен в RequireJS. Загрязнение пространства имен - плохая идея. Это одна из причин, почему AMD - это вещь в JavaScript.

Если вы действительно хотите, чтобы загрязнять пространство имен, хотя, вы можете использовать это:

var helper = Helpers; 
var clickOn = helper.clickOn; 
beforeEach(function() { 
    LogInToSystem.AsAdmin(); 
    var initPage = new InitPage; 
    clickOn(initPage.usersButton); 
});