我在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')
可能有人知道这种情况的解决方案。
答案 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