赛普拉斯自定义命令,用于类似数组的prevSubject

时间:2019-09-04 14:15:37

标签: cypress

我正在编写一个自定义命令getFirst,该命令根据给定的谓词返回第一个元素。一切正常,但是我想指定一个特定的prevSubject参数而不是true,以防止使用不当。

documentation中,仅提及的选项为falsetrueoptionalelementdocument或{{1} },但并未说明如何指定类似cy.each的数组状结构。

有什么想法可以做到吗?

这是我的代码:

window

});

PS:如果有人对如何摆脱Cypress.Commands.add('getFirst', {prevSubject: true}, <TSourceSubject, TPredicateSubject, TResult>( subject: TSourceSubject, getPredicateSubject : (sourceSubject : TSourceSubject) => Chainable<TPredicateSubject>, predicate: (predicateSubject: TPredicateSubject) => boolean) => { cy.wrap(subject).each((item : TSourceSubject) => { getPredicateSubject(item).then<TPredicateSubject>((predicateSubject : any) => { if (predicate(predicateSubject)) { cy.wrap(item).as('getFirstItemAlias'); } }); }); return cy.get('@getFirstItemAlias'); 别名有所了解,或者有某种方法可以将其范围设为本地,这也将非常有帮助。

谢谢!

1 个答案:

答案 0 :(得分:1)

我很好奇,所以我看了赛普拉斯的源代码以了解它是如何完成的。

prevSubject没有任何其他未记录的选项:https://github.com/cypress-io/cypress/blob/develop/packages/driver/src/cy/ensures.coffee#L21-L39

cy.each()使用{ prevSubject: true }并显式检查subject是一个数组:https://github.com/cypress-io/cypress/blob/0f73bb7e1910296469f3f631a7f2303f4ecd035e/packages/driver/src/cy/commands/connectors.coffee#L374-L383