[Cypress] install, configure, and script Cypress for JavaScript web applications -- part3
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 login
commands 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相关推荐
- 添加2本书 JavaScript Patterns、Developing JavaScript Web Applications
JavaScript Patterns http://jayli.github.com/javascript.patterns/ Developing JavaScript Web Applicat ...
- 基于MVC的JavaScript Web富应用开发
基于MVC的JavaScript Web富应用开发 (美)麦卡劳(MacCaw,A.)著 李晶,张散集译 ISBN 978-7-121-10956-0 2012年5月出版 定价:59.00 元 16开 ...
- 《基于MVC的JavaScript Web富应用开发》 电子工业出版社 (一)
<基于MVC的JavaScript Web富应用开发> 书名原文<JavaScript Web Applications> Alex MacCaw 著 李晶 张散集 译 ...
- [JavaScript] script type=text/javascript /script 和script language=javascript /script区别
language="javascript" 和type="text/javascript"的区别 (1)<script language="ja ...
- 15 个 JavaScript Web UI 库
新闻来源:speckboy.com 几乎所有的富 Web 应用都基于一个或多个 Web UI 库或框架,这些 UI 库与框架极大地简化了开发进程,并带来一致,可靠,以及高度交互性的用户界面.本文介绍了 ...
- 15 个 JavaScript Web UI 库 (转)
几乎所有的富 Web 应用都基于一个或多个 Web UI 库或框架,这些 UI 库与框架极大地简化了开发进程,并带来一致,可靠,以及高度交互性的用户界面.本文介绍了 15 个非常强大的 JavaScr ...
- 网页设计作业——小米商城官网首页(1页) HTML+CSS+JavaScript web期末作业设计网页_清新淡雅个人网页大学生网页设计作业成品
HTML5期末大作业:网页设计--小米商城官网首页(1页) 文章目录 HTML5期末大作业:网页设计--小米商城官网首页(1页) 一.作品展示 二.文件目录 三.代码实现 四.完整源码 一.作品展示 ...
- JavaScript Web APIs部分参考pink老师ppt(网页常见的js案例)
JavaScript基础知识 JavaScript Web API DOM DOM 树 获取元素 根据 ID 获取 根据标签名获取 获取特殊元素(body,html) 获取body元素 获取html元 ...
- DIV布局——化妆品商城-功能齐全(43页) HTML+CSS+JavaScript web大作业 静态网页
HTML5期末大作业:化妆品商城网站设计--化妆品商城-功能齐全(43页) HTML+CSS+JavaScript web大作业 静态网页 文章目录 HTML5期末大作业:化妆品商城网站设计--化妆品 ...
最新文章
- 算法提高---概率计算
- 重新标注128万张ImageNet图片:多标签,提升模型性能
- python序列化和反序列化_python反序列化免杀
- 【NLP】270篇ACL 2019代码开源的论文,全在这里了!
- 计算机系统层次中应用语言级,计算机系统的多级层次结构
- 展望Silverlight 5.0新版本更新与发展
- 如何通过RFID开发来迎接第四次工业革命(转)
- oh-my-zsh官方教程
- wordpress后台添加子菜单 add_submenu_page()
- matlab算出中心差分方法_方差分析、T检验、卡方分析如何区分?
- 视频编解码(十五):解码器解码查错步骤
- 苹果Mac 3D 建模渲染软件:Vectorworks
- 2022年PMP培训机构如何挑选?哪家好?
- 计算机报名照片在线修图,详细!2020国家公务员考试报名确认专题照片处理工具使用教程...
- 聊天类APP的测试点
- 【windows】--- SQL Server 2008 超详细安装教程
- Unity VR成像原理
- 安装set 安装ptf框架
- 中国古代四大名著电子书(android)
- 基于FPGA的UART串口通信实验(VHDL语言实现)
热门文章
- react把表格渲染好ui_《RSUITE》React企业级UI框架实战评测
- 计算机管理器磁盘清理,修复win7提示“windows磁盘空间清理管理器已停止工作”的方法...
- 手机鸿蒙公测选择一个应用,鸿蒙系统公测半个月,首批“差评”很难听,但是却也很真实...
- 两路服务器型号,两路服务器 核数
- 工控机的io开发_Amazing!从树莓派4B主板到嵌入式无风扇工控机,只需三步!
- html 首行缩进2个汉字
- 在Oracle中查看客户端连接的IP信息 .
- 数据结构(一)--稀疏数组
- redis 多线程_Java架构师Redis单线程?别逗了,Redis6.0多线程重磅来袭
- python flask restful入门_Python Flask高级编程之RESTFul API前后端分离精讲