如何在打字稿中的对象中使用类函数?

时间:2018-08-06 12:00:17

标签: typescript protractor e2e-testing

我正在编写一个角度测试并结束测试。这是页面对象类的代码。

export class AppPage {

NodeArrow(node) {
  let NodeArrow = $$('.toggle-children').get(node);
  return NodeArrow;
  }
}

并且我试图在课堂之外使用它。

  import { AppPage } from './app.po';
  describe('Interactive component', async () => {
  beforeEach(async () => {
    page.navigateToEditor();
    browser.waitForAngularEnabled(false);
  });
  let page = await new AppPage();
   it('Deleting item in Paramter tab works', async() => {
       await browser.wait(EC.visibilityOf(page.NodeArrow(0)), 10000);
    }

,但它表示未定义NodeArrow。我怀疑我是否用打字稿正确地写下了功能。请让我知道我做错了什么

2 个答案:

答案 0 :(得分:1)

类的构造函数无法返回承诺,因此您无法await

import { AppPage } from './app.po';
describe('Interactive component', async () => {
    beforeEach(async () => {
        page.navigateToEditor();
        browser.waitForAngularEnabled(false);
    });
    let page = new AppPage(); // No await
    it('Deleting item in Paramter tab works', async () => {
        await browser.wait(EC.visibilityOf(page.NodeArrow(0)), 10000);
    }
});

如果您有需要在正确初始化对象之前完成的异步代码,则可以使用静态帮助函数:

export class AppPage {
    private constructor() {
        // non async code 
    }

    static async create() : Promise<AppPage> {
        var r = new AppPage();
        await r.asynInit()
        return r
    }
    async asynInit() : Promise {
        // async cod
        await delay(100);
    }
    NodeArrow(node) {
        let NodeArrow = $$('.toggle-children').get(node);
        return NodeArrow;
    }
}

import { AppPage } from './app.po';
describe('Interactive component', async () => {
    beforeEach(async () => {
        page.navigateToEditor();
        browser.waitForAngularEnabled(false);
    });
    let page = await AppPage.create();
    it('Deleting item in Paramter tab works', async () => {
        await browser.wait(EC.visibilityOf(page.NodeArrow(0)), 10000);
    }
});

答案 1 :(得分:1)

从您的await中删除new AppPage()

import {
  AppPage
} from './app.po';

describe('Interactive component', async () => {
  beforeEach(async () => {
    page.navigateToEditor();
    browser.waitForAngularEnabled(false);
  });
  let page = new AppPage(); // remove await
  it('Deleting item in Paramter tab works', async () => {
    await browser.wait(EC.visibilityOf(page.NodeArrow(0)), 10000);
  })
});