Javascript 在JS上使用require语句加载多个文件

Javascript 在JS上使用require语句加载多个文件,javascript,protractor,requirejs,cucumber,pageobjects,Javascript,Protractor,Requirejs,Cucumber,Pageobjects,尝试加载多个js时,执行返回以下错误: TypeError: Cannot read property 'get' of undefined 我正在实现的解决方案有一个登录\u steps.js: var LoginSteps = function() { var LoginSteps = require("../pages/pages.js"); browser.ignoreSynchronization = true; this.World = function MyWorld() {

尝试加载多个js时,执行返回以下错误:

TypeError: Cannot read property 'get' of undefined
我正在实现的解决方案有一个登录\u steps.js

var LoginSteps = function() {

var LoginSteps = require("../pages/pages.js");
browser.ignoreSynchronization = true;

this.World = function MyWorld() {
    this.page = new LoginSteps();
};

this.Given(/^the page is open$/, function (callback) {
    this.page.login_page.get();
    callback();
});
};

module.exports = LoginSteps;
一个page.js我想包含我需要的所有模块

var Pages = function() {
module.exports = {
    shipments_page: require('./shipments_page.js'),
    login_page: require('./login_page.js'),
};
};

module.exports = Pages;
以及模块登录页面.js:

var chai = require('chai').use(require('chai-as-promised'));
var expect = chai.expect;

this.get = function() {
    browser.get('https://aaa/login');
};

this.setEmail = function(value) {
    element(by.id('login-email')).sendKeys(value);
};

this.setPassword = function(value) {
    element(by.id('login-password')).sendKeys(value);
};

this.clickAccede = function() {
    element(by.id('login-submit')).click()
};
var chai = require('chai').use(require('chai-as-promised'));
var expect = chai.expect;

this.pageIsLoaded = function() {
    browser.waitForAngular();
    expect(browser.getTitle()).to.be.eventually.equals('title');
};
shipping\u page.js:

var chai = require('chai').use(require('chai-as-promised'));
var expect = chai.expect;

this.get = function() {
    browser.get('https://aaa/login');
};

this.setEmail = function(value) {
    element(by.id('login-email')).sendKeys(value);
};

this.setPassword = function(value) {
    element(by.id('login-password')).sendKeys(value);
};

this.clickAccede = function() {
    element(by.id('login-submit')).click()
};
var chai = require('chai').use(require('chai-as-promised'));
var expect = chai.expect;

this.pageIsLoaded = function() {
    browser.waitForAngular();
    expect(browser.getTitle()).to.be.eventually.equals('title');
};
然后,当我执行测试时,日志显示

Failures:

1) Scenario: User login - features/login.feature:3
Step: Given the page is open - features/login.feature:4
Step Definition: features/steps/login_steps.js:16
Message:
 TypeError: Cannot read property 'get' of undefined
     at MyWorld.<anonymous> (/Users/mj/IdeaProjects/atpro/features/steps/login_steps.js:17:30)
     at process._tickCallback (internal/process/next_tick.js:61:11)

1 scenario (1 failed)
5 steps (1 failed, 4 skipped)
故障:
1) 场景:用户登录-功能/登录。功能:3
步骤:给定页面已打开-功能/登录。功能:4
步骤定义:features/steps/login_steps.js:16
信息:
TypeError:无法读取未定义的属性“get”
在我的世界。(/Users/mj/IdeaProjects/atpro/features/steps/login_steps.js:17:30)
在进程中。_tick回调(内部/process/next_tick.js:61:11)
1个场景(1个失败)
5个步骤(1个失败,4个跳过)

如果我解释正确,这就是您想要的。您只需稍微更改page.js

module.exports = function() {
   this.shipments_page = require('./shipments_page.js');
   this.login_page = require('./login_page.js');
};

请试试这个。我现在无法测试:=)

以下是您可以尝试的代码。它对我有用。我根据您的代码片段进行了修改。不过,我不会在测试中使用此模式。您可能不想使用您正在遵循的模式编写量角器测试。应该始终在步骤定义代码中使用验证/断言。如果您在page对象中进行验证,即使验证失败,您的测试仍将显示已通过

登录_steps.js

var LoginSteps = function() {

var LoginSteps = require("../pages/pages.js");
browser.ignoreSynchronization = true;

this.World = function MyWorld() {
this.page = LoginSteps;
};

this.Given(/^the page is open$/, function (callback) {
this.page.login_page.get();
callback();
});
};

module.exports = LoginSteps;
pages.js:

 module.exports = {
 shipments_page: require('./shipments_page.js'),
 login_page: require('./login_page.js'),
 };

你到底想做什么?@Jer,我想能够从login_steps.js调用不同js文件中的函数。我想我遗漏了一些东西:Message:TypeError:this.page.login_page.get不是MyWorld中的函数。(/Users/marianojover/IdeaProjects/aaa/features/steps/login_steps.js:11:30)在进程中。_tickCallback(internal/process/next_tick.js:61:11)您使用了this.page.login_page.get还是this.page.login_page.get()?成功了!我使用的是这个.page.login\u page.get(),但问题出在login\u page.js中