【问题标题】:Unable to create object of child class - TypeError: HomePage_1.HomePage is not a constructor无法创建子类的对象 - TypeError: HomePage_1.HomePage 不是构造函数
【发布时间】:2019-08-02 17:14:35
【问题描述】:

我正在使用带有 Protractor 和 mocha 的打字稿。基本上尝试运行将通过多个页面的测试。我正在尝试使用 POM,但在使用继承时无法实例化对象。

尝试创建新对象时出现以下错误:

UnhandledPromiseRejectionWarning: TypeError: HomePage_1.HomePage 不是构造函数

我可以实例化一个不从任何其他类扩展的类的对象(下面的导航对象没有问题)。我在这里尝试了类似问题的各种建议,但似乎没有一个有效。

这是我的测试类:e2e.ts

import { browser } from 'protractor';
import { Navigation } from './core/Navigation';
import { HomePage } from './page-objects/HomePage';

var nav = new Navigation(); // <-- SUCCESS NO PROBLEMS
var hmPg = new HomePage(); // <-- FAILS HERE
 describe('Add product to cart',async function() {
        it("start from homepage", async function() {
             nav.navigate("index");
        });

        it("Perform search", async function() {
              hmPg.search("monopoly board game");
        });

//some more tests here till adding the product to cart
});

主页类:HomePage.ts

import {browser, element, protractor} from 'protractor';
import { BasePageObject } from './BasePageObject';

export class HomePage extends BasePageObject{

    private EC = protractor.ExpectedConditions;
    private map;

    constructor(){
        super();
        super.loadMap(process.cwd()+"\\page-objects\\homePage.json");
    }

    public search(product:string){
       //some stuff here
    }

    //some more methods here.
}

这是我的 BasePageObject.ts 类:

//some imports here
export class BasePageObject{

    //to store parsed json
    public mapData;
    public mapPath:string;
    public contentData;
    public contentPath:string;

    constructor(){
        //nothing to do here. Just setting the logger.
        log = factory.getLogger("BasePageObject");
    }
  //some other methods here
}

这是我的 tsconfig.json

{
  "compileOnSave": true,
  "compilerOptions": {
    "baseUrl": ".",
    "module": "commonjs",
    "paths": { "*": ["types/*"] },
    "outDir": "./dist/out-tsc",
    "mapRoot": "./dist/out-tsc/",
    "esModuleInterop": true,
    "sourceMap": true,
    "declaration": false,
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "allowSyntheticDefaultImports": true,
    "target": "es6",
    "typeRoots": [
      "node_modules/@types",
    ]
  }
}

这也是为我的测试类运行 tsc 后生成的 js 文件:

Object.defineProperty(exports, "__esModule", { value: true });
var protractor_1 = require("protractor");
var Navigation_1 = require("./core/Navigation");
var HomePage_1 = require("./page-objects/HomePage");

var nav = new Navigation_1.Navigation();
var hmPg = new HomePage_1.HomePage(); <--- FAILS HERE
describe('Add product to cart', function () {
    return __awaiter(this, void 0, void 0, function () {
        return __generator(this, function (_a) {
            this.timeout(90000);
            it("start from homepage", function () {
                return __awaiter(this, void 0, void 0, function () {
....
...
..
.

这是我在 package.json 中的依赖项:

"dependencies": {
    "@types/mocha": "^5.2.7",
    "@types/node": "^11.13.17",
    "chai": "^4.2.0",
    "chai-as-promised": "^7.1.1",
    "graphviz": "0.0.9",
    "minimist": "^1.2.0",
    "mocha": "^6.1.4",
    "npm-failsafe": "^0.4.1",
    "protractor": "^5.4.2",
    "protractor-screenshot-utils": "^1.0.3",
    "rimraf": "^2.6.3",
    "serenity-cli": "^0.11.3",
    "serenity-js": "^1.10.13",
    "ts-node": "^8.3.0",
    "tslint": "^5.18.0",
    "typescript": "^3.5.2",
    "typescript-logging": "^0.6.3",
    "yargs": "^13.2.4"
}

应该很简单,var obj = new Class() 对吧?这行不通。

【问题讨论】:

  • @Yevhen 不确定我的问题是否正确。我没有使用任何特定的代码来导出类,因为它们一开始就有导出语句。另一方面,由 tsc 使用 es6 生成的 JS

标签: javascript typescript constructor protractor mocha.js


【解决方案1】:

问题中包含的代码不足以查看问题所在。但是根据可以收集到的任何信息,您正在使用 async/await 并将量角器承诺管理器设置为 false。

如果是这种情况,那么无论在构造函数、方法等中的什么地方,您都必须自己处理异步。

该错误仅意味着您在某处拥有本质上是异步的代码,并且未处理生成的 Promise。我建议查找作为new HomePage() 一部分执行的所有代码。

此外,只需快速浏览代码即可识别任何此类未处理承诺的情况。

希望对您有所帮助...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    • 2018-10-31
    • 1970-01-01
    • 2016-09-23
    相关资源
    最近更新 更多