量角器+茉莉花+ TS。打字问题:xit返回无效。如何使用xit()。pend(原因)

时间:2018-09-07 06:46:03

标签: typescript protractor

我在Typescript上使用量角器+茉莉花进行e2e测试。

在尝试实施由标签运行的一些测试时,我遇到了一个问题

请参见下面的代码:

function testCase(description: string, testSteps: (done?: DoneFn) => 
void, tags?: ReadonlyArray<string>): void {
  const specTagsList: ReadonlyArray<string> = tags || [];
  const tagsToRun: ReadonlyArray<string> = browser.params.tags.split(',');

  if (tagsToRun.length === 0 || specTagsList.some(tag => tagsToRun.indexOf(tag) >= 0)) {
    it(description, testSteps);
  } else {
    xit(description, testSteps)
      .pend(`specTagsList:\t${specTagsList}\ntagsToRun:\t${browser.params.tags}`);
  }
}

不幸的是,在键入xit时声明了空返回类型:

declare function xit(expectation: string, assertion?: (done: DoneFn) => void, timeout?: number): void;

所以我不能在代码=(

中使用.pend('reason')

可能有人知道这种情况的解决方案。

2 个答案:

答案 0 :(得分:0)

找到解决方案:

export function testCase(description: string, testSteps: (done?: DoneFn) => void, tags?: ReadonlyArray<string>): void {
  const testCaseTagsList: ReadonlyArray<string> = tags || [];
  const tagsToRun: ReadonlyArray<string> = browser.params.tags.split(',');

  if (tagsToRun.length === 0 || testCaseTagsList.some(tag => tagsToRun.indexOf(tag) >= 0)) {
    it(description, testSteps);
  } else {
    // need any due to wrong xit declaration which returns void
    const skippableXit: any = xit(description, testSteps);
    skippableXit.pend(`specTagsList:\t${testCaseTagsList}\ntagsToRun:\t${browser.params.tags}`);
  }
}

答案 1 :(得分:0)

我也遇到了这个问题,这几乎是相同的解决方案,但是您可以使用后缀as any来执行相同的操作(解决编译器错误),而无需引入新变量:

(xit(description, testSteps) as any)
  .pend(`specTagsList:\t${specTagsList}\ntagsToRun:\t${browser.params.tags}`);

或者我们可以像下面这样全局修改输入类型:

declare global {
    function xit(expectation: string, assertion?: (done: DoneFn) => void, timeout?: number): any;
}

尽管如此,我仍在设法找出正确的解决方案。

该问题已发布到DefinitelyTyped项目: https://github.com/DefinitelyTyped/DefinitelyTyped/issues/14000