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

neiya

我需要测试对象数组包含某个值。该测试是用赛普拉斯编写的,为此,我使用cy.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');

但这不能工作,因为.some()只能返回布尔值。我想有一个数组函数可以帮助我做到这一点,但是我找不到哪个。

我不确定是否:

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

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

理查德·马特森

如何使用.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期望丽莎等于丽莎

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章