Переход на TypeScript. Почему моя функция не распознается? - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь перенести работающий проект 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 - это функция.

Почему он не распознает мою функцию?

1 Ответ

0 голосов
/ 12 сентября 2018

этот код по-прежнему очень похож на 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...