我正在编写一个自定义命令getFirst
,该命令根据给定的谓词返回第一个元素。一切正常,但是我想指定一个特定的prevSubject
参数而不是true
,以防止使用不当。
在documentation中,仅提及的选项为false
,true
,optional
,element
,document
或{{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');
别名有所了解,或者有某种方法可以将其范围设为本地,这也将非常有帮助。
谢谢!
答案 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