如何在赛普拉斯中自定义断言

时间:2020-01-30 10:48:13

标签: javascript arrays cypress

我需要测试对象数组包含某个值。该测试是用赛普拉斯编写的,为此,我使用.v-application .titlecy.wrap

我的代码如下:

.some()

这很好,但是问题是它随后在赛普拉斯控制台中向我返回了非常非特定的消息。

我想拥有的是,以一种易于理解的方式更改代码。这个想法就是这样:

const myCustomArray = [{ name: 'Lisa' }, { name: 'Katie' }];
cy.wrap(myCustomArray.some((user) => {
    if (user.name === 'Lisa') {
      return true;
    } else {
      return false;
    }
  })).should('eq', true);

但这不能工作,因为const myCustomArray = [{ name: 'Lisa' }, { name: 'Katie' }]; cy.wrap(myCustomArray.some((user) => { if (user.name === 'Lisa') { return 'user name is Lisa'; } })).should('eq', 'user name is Lisa'); 只能返回布尔值。我想有一个数组函数可以帮助我做到这一点,但我找不到哪个。

我不确定是否:

  • 有些我不知道的赛普拉斯命令可以解决此问题,例如。自定义断言消息。
  • 或者可以通过使用JavaScript来解决

这两种解决方案对我来说都很好。

1 个答案:

答案 0 :(得分:1)

如何使用.find()而不是.some(),并深度均衡结果,

cy.wrap(myCustomArray.find(user => user.name === 'Lisa')) 
  .should('deep.eq', { name: 'Lisa' });

ASSERT期望{名称:Lisa}与{名称:Lisa}非常相等

或者如果您有大物件而只想看到名称,

cy.wrap(myCustomArray.map(user => user.name).find(name => name === 'Lisa')) 
  .should('eq', 'Lisa');

ASSERT期望丽莎等于丽莎