Use custom Cypress command for reusable assertions

We’re duplicating quite a few commands between the registration and login of our user for assertions. Let’s see how we can take these assertions and create a custom command to make the assertions.

We have the tests:

    it('should register a new user', () => {cy.createUser().then(user => {cy.visit('/').getByText(/login/i).click().getByLabelText(/username/i).type(user.username).getByLabelText(/password/i).type(user.password).getByText(/submit/i).click()// verify the user in localStorage
            .url().should('eq', `${Cypress.config().baseUrl}/`)
            .window().its('localStorage.token').should('be.a', 'string').getByTestId('username-display', {timeout: 500}).should('have.text', user.username)})});

We can create some assertions commands to make it more reusable:

Cypress.Commands.add('assertHome', () => {cy.url().should('eq', `${Cypress.config().baseUrl}/`)
})Cypress.Commands.add('assertLoggedInAs', user => {cy.window().its('localStorage.token').should('be.a', 'string').getByTestId('username-display', {timeout: 500}).should('have.text', user.username)
})

Then we can improve the test:

    it('should register a new user', () => {cy.createUser().then(user => {cy.visit('/').getByText(/login/i).click().getByLabelText(/username/i).type(user.username).getByLabelText(/password/i).type(user.password).getByText(/submit/i).click().assertHome().assertLoggedInAs(user);})});

Run tests as an authenticated user with Cypress

For most applications you’re going to need to be logged in as a user to interact with the application. Let’s see how we can register as a new user and login as that user to test using the application as a logged in user.

Sometime you want to check some DOM element is not present, you cna use queryByTestId()

    it('displays the username', () => {cy.createUser().then(user => {cy.visit('/').getByText(/login/i).click().getByLabelText(/username/i).type(user.username).getByLabelText(/password/i).type(user.password).getByText(/submit/i).click().assertLoggedInAs(user).getByText(/logout/i).click().queryByTestId('username-display', {timeout: 300}).should('not.exist')})});

Combine custom Cypress commands into a single custom command

Almost every time we need to login, we’ll want to have a newly created user to login as. Let’s go ahead and combine the createNewUser and logincommands to create a single loginAsNewUser which we can use in any test that needs an authenticated user.

// support/commands.js

Cypress.Commands.add('loginAsNewUser', () => {cy.createUser().then(user => {cy.login(user)});
});Cypress.Commands.add('login', user => {cy.request({url: 'http://localhost:3000/login',method: 'POST',body: user,}).then(({body}) => {window.localStorage.setItem('token', body.user.token);return body.user;})
})

// e2e/calcualtor.js

describe('authenticated calculator', () => {it('displays the username', () => {cy.loginAsNewUser().then((user) => {cy.visit('/').getByTestId('username-display').should('have.text', user.username).getByText(/logout/i).click().queryByTestId('username-display', {timeout: 300}).should('not.exist')})});
})

Install React DevTools with Cypress

Because Cypress runs in a real Chrome browser, we can install extensions, like React DevTools. The tricky bit will be to make our application hook up to the extension properly.

react-dev-tools.js

if (window.Cypress) {window.__REACT_DEVTOOLS_GLOBAL_HOOK__ = window.parent.__REACT_DEVTOOLS_GLOBAL_HOOK__}

Import the script before we import the REACT

index.js

import './react-dev-tools'import './global.css'
import React from 'react'

转载于:https://www.cnblogs.com/Answer1215/p/10079585.html

[Cypress] install, configure, and script Cypress for JavaScript web applications -- part3相关推荐

  1. 添加2本书 JavaScript Patterns、Developing JavaScript Web Applications

    JavaScript Patterns  http://jayli.github.com/javascript.patterns/ Developing JavaScript Web Applicat ...

  2. 基于MVC的JavaScript Web富应用开发

    基于MVC的JavaScript Web富应用开发 (美)麦卡劳(MacCaw,A.)著 李晶,张散集译 ISBN 978-7-121-10956-0 2012年5月出版 定价:59.00 元 16开 ...

  3. 《基于MVC的JavaScript Web富应用开发》 电子工业出版社 (一)

    <基于MVC的JavaScript Web富应用开发> 书名原文<JavaScript Web Applications> Alex MacCaw 著   李晶 张散集 译  ...

  4. [JavaScript] script type=text/javascript /script 和script language=javascript /script区别

    language="javascript" 和type="text/javascript"的区别 (1)<script language="ja ...

  5. 15 个 JavaScript Web UI 库

    新闻来源:speckboy.com 几乎所有的富 Web 应用都基于一个或多个 Web UI 库或框架,这些 UI 库与框架极大地简化了开发进程,并带来一致,可靠,以及高度交互性的用户界面.本文介绍了 ...

  6. 15 个 JavaScript Web UI 库 (转)

    几乎所有的富 Web 应用都基于一个或多个 Web UI 库或框架,这些 UI 库与框架极大地简化了开发进程,并带来一致,可靠,以及高度交互性的用户界面.本文介绍了 15 个非常强大的 JavaScr ...

  7. 网页设计作业——小米商城官网首页(1页) HTML+CSS+JavaScript web期末作业设计网页_清新淡雅个人网页大学生网页设计作业成品

    HTML5期末大作业:网页设计--小米商城官网首页(1页) 文章目录 HTML5期末大作业:网页设计--小米商城官网首页(1页) 一.作品展示 二.文件目录 三.代码实现 四.完整源码 一.作品展示 ...

  8. JavaScript Web APIs部分参考pink老师ppt(网页常见的js案例)

    JavaScript基础知识 JavaScript Web API DOM DOM 树 获取元素 根据 ID 获取 根据标签名获取 获取特殊元素(body,html) 获取body元素 获取html元 ...

  9. DIV布局——化妆品商城-功能齐全(43页) HTML+CSS+JavaScript web大作业 静态网页

    HTML5期末大作业:化妆品商城网站设计--化妆品商城-功能齐全(43页) HTML+CSS+JavaScript web大作业 静态网页 文章目录 HTML5期末大作业:化妆品商城网站设计--化妆品 ...

最新文章

  1. 算法提高---概率计算
  2. 重新标注128万张ImageNet图片:多标签,提升模型性能
  3. python序列化和反序列化_python反序列化免杀
  4. 【NLP】270篇ACL 2019代码开源的论文,全在这里了!
  5. 计算机系统层次中应用语言级,计算机系统的多级层次结构
  6. 展望Silverlight 5.0新版本更新与发展
  7. 如何通过RFID开发来迎接第四次工业革命(转)
  8. oh-my-zsh官方教程
  9. wordpress后台添加子菜单 add_submenu_page()
  10. matlab算出中心差分方法_方差分析、T检验、卡方分析如何区分?
  11. 视频编解码(十五):解码器解码查错步骤
  12. 苹果Mac 3D 建模渲染软件:Vectorworks
  13. 2022年PMP培训机构如何挑选?哪家好?
  14. 计算机报名照片在线修图,详细!2020国家公务员考试报名确认专题照片处理工具使用教程...
  15. 聊天类APP的测试点
  16. 【windows】--- SQL Server 2008 超详细安装教程
  17. Unity VR成像原理
  18. 安装set 安装ptf框架
  19. 中国古代四大名著电子书(android)
  20. 基于FPGA的UART串口通信实验(VHDL语言实现)

热门文章

  1. react把表格渲染好ui_《RSUITE》React企业级UI框架实战评测
  2. 计算机管理器磁盘清理,修复win7提示“windows磁盘空间清理管理器已停止工作”的方法...
  3. 手机鸿蒙公测选择一个应用,鸿蒙系统公测半个月,首批“差评”很难听,但是却也很真实...
  4. 两路服务器型号,两路服务器 核数
  5. 工控机的io开发_Amazing!从树莓派4B主板到嵌入式无风扇工控机,只需三步!
  6. html 首行缩进2个汉字
  7. 在Oracle中查看客户端连接的IP信息 .
  8. 数据结构(一)--稀疏数组
  9. redis 多线程_Java架构师Redis单线程?别逗了,Redis6.0多线程重磅来袭
  10. python flask restful入门_Python Flask高级编程之RESTFul API前后端分离精讲