繁体   English   中英

迁移到TypeScript。 为什么我的功能无法识别?

[英]Migrating to TypeScript. Why is my function not recognised?

我正在尝试将正常运行的JavaScript项目迁移到TypeScript。 该项目使用nightwatch.js

这是我的主要测试课:

declare function require(path: string): any;

import * as dotenv from "dotenv";
import signinPage = require("../built/pages/signinPage.js");
import instancesPage = require("../built/pages/instancesPage.js");
dotenv.config();

module.exports = {
    'User can sign in'(client) {

        console.log("Sign in as email: " + process.env.EMAIL);

        signinPage
            //   .navigate()
            .signin(process.env.EMAIL, process.env.PASSWORD);

        // give it time to load

        client.pause(5000);

        instancesPage.expect.element('@homepageWelcomeTitle').text.to.contain('Welcome to the CJDocs Home!');

        client.end();
    }
}

这是pageObject,包含有问题的功能:

  module.exports = {  
  signin: function(email, password) {
    return this
      .waitForElementVisible('@emailInput')
      .setValue('@emailInput', email)
      .setValue('@passwordInput', password)
      .waitForElementVisible('@signinButton')
      .click('@signinButton')
  },
  elements: {
    emailInput: {
      selector: 'input[type=email]'
    },
    passwordInput: {
      selector: 'input[name=password]'
    },
    signinButton: {
      selector: 'button[type=submit]'
    }
  }
};

当我运行此程序(使用NPM测试从终端运行)时,出现错误:

TypeError: signinPage.signin is not a function

据我所知,signinPage.signin是一个函数。

为什么无法识别我的功能?

这段代码仍然是JS / ES5而不是TS。 尝试将import signinPage更改为import * as signinPage 也许有帮助。

但实际上,我建议查找类似类的ES6 / TS功能。 因此,使signinPage.ts:

export default class signinPage {
  signin(email, password) {
    return this
      .waitForElementVisible('@emailInput')
      .setValue('@emailInput', email)
      .setValue('@passwordInput', password)
      .waitForElementVisible('@signinButton')
      .click('@signinButton')
  }
  get elements() {
    return {
      emailInput: {
        selector: 'input[type=email]'
      },
      passwordInput: {
        selector: 'input[name=password]'
      },
      signinButton: {
        selector: 'button[type=submit]'
      }
    }
  }
}

然后将您的导入更改为import singinPage from "../src/pages/signinPage"

因此,您是从TS文件指向另一个TS文件,但不需要.ts扩展名。

暂无
暂无

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

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