繁体   English   中英

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

[英]How to export this function in Node.js into another module

我正在使用量角器来测试Angular 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文件中,我想将此方法称为login:

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');
});

启动此代码时,量角器未在相应字段中输入用户名和密码,而我却得到了这个控制台输出:

   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)

这是引发错误的第34行:

loginPage.login('incorrectusername','incorrectpassword');

如何在另一个模块的登录页面功能内使用登录功能?

require( './login-page.js' )返回一个“类”函数。 这意味着,要调用loginPage模块的login方法,可以使用new 例:

it('should not login : incorrect login details', function()
{
    var page = new loginPage();
    page.login('incorrectusername','incorrectpassword');
    expect(page.loginError.getText()).toContain('Access denied');
});

删除require("./login.spec.js"); 模块开始的时间。 该测试正在创建模块之前运行。

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

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

而不是“ this”,而是使用global。

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');
});

您可能还想为userName变量命名,并将userName arg和password命名为不同的名称。 (上面已修复)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM