Cypress 是目前比较流行的前端自动化测试框架,提供了很多方便的 API 帮助我们编写自动化测试用例,但是它自带的断言库有一些局限性,比如无法直接支持异步测试,也无法使用 chai 的一些插件,因此我们需要使用其它断言库来扩展 Cypress 的能力。
安装其它断言库
Cypress 官方文档推荐使用 Chai.js 作为默认的断言库,但实际上我们完全可以使用其它的库,只需使用如下命令安装即可:
npm install --save-dev [library-name]
例如我们可以安装 expect.js:
npm install --save-dev expect.js
集成其它断言库
安装好其它断言库后,我们需要修改 Cypress 的 support/index.js
文件来集成这个库。在这个文件中,我们可以将断言库扩展到 Cypress 的命名空间上,使其在测试文件中可以通过 cy
命令使用。
import '@testing-library/cypress/add-commands'; // 导入断言库 import expect from 'expect.js'; Cypress.Commands.add('expect', expect);
在这个文件中,我们使用了 Cypress 的命令添加机制将 expect.js 的 api 添加到 Cypress 命名空间中,这样在测试文件中就可以直接使用这些 api 了。
在测试中使用其它断言库
在测试文件中,我们可以使用添加的 cy.expect
命令实现常规的测试,并使用 Chai.js 的断言语法:
describe('my test', () => { it('should show title', () => { cy.visit('https://example.com/'); cy.get('h1').should('have.text', 'Example Domain'); }); it('should test async', () => { cy.wait(500).then(() => { cy.wrap('foo') .should('have.length', 3) .and('equal', 'foo'); }); }); it('should test with expect.js', () => { cy.visit('https://example.com/'); cy.get('h1').should(element => { cy.expect(element.text()).to.equal('Example Domain'); }); }); });
在上面的测试代码中,我们先测试了常规的断言库,具体包括页面上是否含有 h1 元素以及是否包含特定文本。然后我们测试了一个异步测试用例,虽然 Cypress 原生的断言库无法直接支持异步测试,但是使用其它断言库可以很方便地解决这个问题。最后,我们测试了使用 expect.js 完成一个常规的有选择器的测试用例。
总结
使用其它断言库可以很好地扩展 Cypress 的能力,达到我们更多的测试需要。在选择其它断言库时,我们需要根据实际需求和个人喜好进行选择,只要符合规范和要求,都可以快速集成到 Cypress 中实现自动化测试。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65b5c6d3add4f0e0ffe8519f