Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将Node.js中的此函数导出到另一个模块中_Javascript_Node.js_Angularjs_Protractor - Fatal编程技术网

Javascript 如何将Node.js中的此函数导出到另一个模块中

Javascript 如何将Node.js中的此函数导出到另一个模块中,javascript,node.js,angularjs,protractor,Javascript,Node.js,Angularjs,Protractor,我正在使用量角器测试一个角度JS应用程序。 我想使用页面对象模式,因此我需要将一个函数导出到另一个模块中 这是我的page-login.js文件: require("./login.spec.js"); var LoginPage = function () { this.userName = element(by.id('login_form_user_input')); this.password = element(by.id('login_form_password_inp

我正在使用量角器测试一个角度JS应用程序。 我想使用页面对象模式,因此我需要将一个函数导出到另一个模块中

这是我的page-login.js文件:

require("./login.spec.js");
var LoginPage = function ()
{
   this.userName = element(by.id('login_form_user_input'));
   this.password =  element(by.id('login_form_password_input')) ;
   this.loginButton = element(by.id('login_form_signin_button'));
   this.loginText = element(by.css('#mainGlobalSearchBtn'));
   this.loginError = element(by.xpath('html/body/div[1]/div[1]/div[1]/form/div/p'));
   this.login = function (userName, password)
       {
         LoginPage.userName.sendKeys(userName);
         LoginPage.password.sendKeys(password);
         LoginPage.loginButton.click ();
         browser.waitForAngular ();
       };
};

 exports.LoginPage = LoginPage;
现在,在同一文件夹下另一个名为login.spec.js的js文件中,我想用以下方法调用登录:

var util = require ('util');
require("./myconfig.js");
describe('Login', function() {
var loginPage = require("./login-page.js");
var ptor;

beforeEach (function ()
{
     ptor = protractor.getInstance();
    ptor.get(settings.winURL);
    waits(2000);
    //Delete cookies to avoid saving password or username
});
it('should not login : incorrect login details', function()
{
     loginPage.login('incorrectusername','incorrectpassword');
     expect(loginPage.loginError.getText()).toContain('Access denied');
});
启动此代码时,量角器未在相应字段中输入username和passwoed,我得到以下控制台输出:

   1) Login should not login : incorrect login details
   Message:
   TypeError: Object #<Object> has no method 'login'
   Stacktrace:
   TypeError: Object #<Object> has no method 'login'
   at null.<anonymous> (C:\******\login.spec.js:34:20)
如何在另一个模块的login page函数中使用login函数?

require./login page.js'返回一个类函数。这意味着,要调用loginPage模块的login方法,您可能需要使用new。例:


删除require./login.spec.js;您的模块的开始部分。测试在模块创建之前运行。

量角器有一个很棒的选项,名为onPrepare。您可以将其放在config.js文件中。您的onPrepare可以引用文件

在此文件中,您可以拥有所需的所有变量和函数

而不是使用全局

global.userName = element(by.id('login_form_user_input'));
global.password =  element(by.id('login_form_password_input')) ;
global.loginButton = element(by.id('login_form_signin_button'));
global.loginText = element(by.css('#mainGlobalSearchBtn'));
global.loginError = element(by.xpath('html/body/div[1]/div[1]/div[1]/form/div/p'));
global.login = function (user, pw)
   {
     userName.sendKeys(user);
     password.sendKeys(pw);
     loginButton.click ();
     browser.waitForAngular ();
   };
然后在配置中执行以下操作:

//other config settings,
onPrepare: myvariables.js
在您的规范中,您不需要任何要求

只要把你需要的减去全球

beforeEach (function () {
 ptor = protractor.getInstance();
ptor.get(settings.winURL);
waits(2000);
//Delete cookies to avoid saving password or username
});
it('should not login : incorrect login details', function()
{
   login('incorrectusername','incorrectpassword');
 expect(loginError.getText()).toContain('Access denied');
});

您还可能希望将用户名变量和用户名arg和密码命名为不同的名称。固定在上面

或以这种方式导出:exports.LoginPage=new LoginPage;我已经尝试了这两种方法,并且都返回了与上面相同的错误!模块返回一个函数,但应该返回一个实例。您试图访问函数上的方法,出现问题。您是对的,我已删除它,但这与我的错误无关,我想我的问题是我正在公开一个函数,并在其中使用另一个函数?
//other config settings,
onPrepare: myvariables.js
beforeEach (function () {
 ptor = protractor.getInstance();
ptor.get(settings.winURL);
waits(2000);
//Delete cookies to avoid saving password or username
});
it('should not login : incorrect login details', function()
{
   login('incorrectusername','incorrectpassword');
 expect(loginError.getText()).toContain('Access denied');
});