为什么Cypress.io使用字符串断言类型选择器,替代品是什么?

时间:2018-10-12 14:55:47

标签: cypress

我需要一个e2e测试工具,在我尝试过的那些工具中,我认为Cypress.io似乎是最好的。

我不明白的是为什么他们在这样的should()子句中使用字符串选择器(我需要我们的测试人员尽可能地轻松,并且我不认为容易出错的字符串是解决方法) :

cy.get('.trigger-input-range')
  .invoke('val', 25)
  .trigger('change')
  .get('input[type=range]').siblings('p')
  .should('have.text', '25')

我已经能够成功使用以下内容:

cy.get('.trigger-input-range')
  .invoke('val', 25)
  .trigger('change')
  .get('input[type=range]').siblings('p')
  .should((e) => {
    expect(e).to.have.text('25')
  });

这至少为我提供了一些安全性,因为IDE提供了诸如“ have.text”,“ have.value”之类的选项(我计划将Typescript用于这些测试,因此欢迎任何可能有所帮助的建议。这是否有一些建议?如果没有,我不会使用这些字符串选择器来理解它们。

还有其他选择吗? 我可以以某种方式修改赛普拉斯以使其具有类似功能吗?

cy.get('.trigger-input-range')
  .invoke('val', 25)
  .trigger('change')
  .get('input[type=range]').siblings('p')
  .shouldHaveText('25')
  .shouldHaveValue('25');

1 个答案:

答案 0 :(得分:2)

.should('have.text', '25');

与此类似:

.should(elem => {
    expect(elem).to.have.text('25');
});

它们只是做同一件事的两种方式。较短的是使用Chai assertion的内联方式,而较长的使用custom command,但会产生相同的结果。

如果要使用.shouldHaveText('25')之类的命令,应该可以通过创建自己的_.first is a alias of _.head来获得它:

Cypress.Commands.add('shouldHaveText', {
  prevSubject: true
}, (subject, expectedText) => {
    // Wrap the subject and use .should() to take advantage of automatic retries
    cy.wrap(subject).should((elem) => {
        expect(elem).to.have.text(expectedText);
    });
});

用法:

cy.get('.someClass').shouldHaveText('25');