从另一个模块调用节点模块,而不使用require()到处

时间:2015-07-24 13:50:22

标签: javascript node.js protractor

文件结构

enter image description here

01.spec.js - - - 我从量角器规格中调用帮助器很好

describe('should click on element', function () {
    var helper1 = require('../../modules/helpers/helper1.js');

    it('should click and assert...', function() {
        helper1.clickOnCircle('Accounts');
    });
});

...但是要使用来自另一个帮助文件的任何辅助函数......

helpers1.js - - - 我必须在每个函数中都需要帮助器

module.exports = {
    clickOnCircle: clickOnCircle,
    clickOnBox   : clickOnBox
};

var helper2 = require('./helper2.js');   //node require doesn't hit something like this

function clickOnCircle(circleText) {
    var helper2 = require('./helper2.js');   //needed in every function
    helper2.doSomething(circleText);
}

function clickOnBox(boxText) {
    var helper2 = require('./helper2.js');   //needed in every function
    helper2.doSomething(boxText);
}

这几乎就像我希望帮助文件在全球范围内可用。我已经搞乱了使用配置参数,但我仍然需要从每个函数中获取帮助器。

3 个答案:

答案 0 :(得分:1)

您可以在模块的开头只加载一次其他模块,然后在该模块内的任何位置引用它们。

这应该可以正常工作:

// require in any other modules we need here
// modules are cached by the system
var helper2 = require('./helper2.js');

function clickOnCircle(circleText) {
    helper2.doSomething(circleText);
}

function clickOnBox(boxText) {
    helper2.doSomething(boxText);
}

module.exports = {
    clickOnCircle: clickOnCircle,
    clickOnBox   : clickOnBox
};

答案 1 :(得分:0)

如何使用继承,

例如:

function shapeModel() {

    var helper = require('./helper2.js');

function clickOnCircle() {
    return helper.doSomething(circleText);
  }

  function clickOnBox() {
    return helper.doSomething(boxText);
  }

  return {
    clickOnCircle: clickOnCircle(),
    clickOnBox   : clickOnBox()
  }
}

module.exports = shapeModel

这也使您可以在模块中使用该类。  这会将exports放置在页面底部,允许helper变量保持范围为全局,而不是在module.exports

之外的作用域

答案 2 :(得分:0)

这是我们如何使用帮助器和页面对象的简短示例。我们有一个名为helper.js的文件,所有页面对象都在pages文件夹中。我们正在使用require-all节点模块来帮助我们包含所有页面对象。

// Require all application pages
global.pages = require('require-all')(__dirname + '/../pages/');
global.EC = protractor.ExpectedConditions;

// Instantiate all pages in our applications, and make them globally available to the tests

//***** User/Nav Pages *****
global.loginPage                 = new pages.Navigation.LoginHomePage();
global.instructorHomePage        = new pages.Navigation.InstructorHomePage();
global.studentHomePage           = new pages.Navigation.StudentHomePage();
global.studentAccessPage         = new pages.Misc.StudentAccessPage();
global.selfEnrollPage            = new pages.User.SelfEnrollPage();
global.instructorNavPanelPage    = new pages.Navigation.InstructorNavPanelPage();
global.studentNavPanelPage       = new pages.Navigation.StudentNavPanelPage();
global.createInstructorPage      = new pages.Admin.CreateInstructorPage();
global.addUserPage               = new pages.User.AddUserPage();

然后这是我们如何拥有其中一个页面的模板

var TemplatePage = function() {   
  //***** Buttons & Links *****   
  this.link = element(by.linkText('link'));   
  this.link2 = element(by.linkText('link2'));

  //***** Input Fields *****


  //***** Drop-Downs *****


  //***** Check Boxes *****


  //***** Page Elements *****


  //***** Helpers *****

  this.clickLink = function() {
    return link.click();   };

};

module.exports = TemplatePage;