前言
在前端开发的过程中,我们不仅要保证代码的正确性,还要确保各个模块之间的协同正常。为了简化这个流程,可以采用自动化测试的方式来进行集成测试。
Cypress 是一个流行的前端自动化测试框架,它支持用户与应用程序进行交互,屏幕截图,以及断言操作等多种自动化测试形式。本文将介绍如何使用 Cypress 进行集成测试。
安装 Cypress
在开始使用 Cypress 进行测试之前,我们需要安装 Cypress。你可以通过以下两种方式进行安装。
方式一:使用 npm 安装
通过 npm 安装 Cypress 是最常用的方法,命令如下:
npm install cypress --save-dev
方式二:使用 Cypress 的可执行文件安装
通过 Cypress 的可执行文件进行安装较为简单,可以在官网下载并安装。
Cypress 基础
在执行 Cypress 的测试之前,我们需要了解 Cypress 的基础概念。
Fixture
Fixture 是用来存储测试数据的 JSON 文件。它们会帮助我们在测试过程中进行数据交互。
Spec
Spec 是存储测试代码的 JavaScript 文件。每个 Spec 文件都是一个单独的测试文件,可以在其中定义一组测试用例。
Test
Test 是在 Spec 文件中定义的测试用例。在 Test 中,我们可以使用断言来验证测试结果。
Command
Command 是 Cypress 提供的一组自定义命令集合,可以扩展 Cypress 的功能。
描述文件
描述文件用于描述测试用例。这些文件会取 describe 关键字,用于组织测试用例的结构。
钩子函数
Cypress 可以在测试执行的前、中、后期,为测试添加一些额外的逻辑。这些逻辑通过钩子函数的方式实现。
示例代码
以下是一个简单的测试代码示例:
describe('Cypress test', () => {
beforeEach(() => {
cy.visit('https://example.com')
})
it('should be visible', () => {
cy.get('.example-selector').should('be.visible')
})
})在这个例子中,我们定义了一个 Cypress 测试用例,该用例会进行以下操作:
在每个测试用例之前,都会打开 https://example.com 页面。
在测试用例中,根据特定选择器查找页面元素,并进行可见性验证。
集成测试示例
接下来,我们将使用 Cypress 进行集成测试。测试的应用程序将是一个待办事项应用程序。
先看一下应用程序的基本功能:
可以向待办事项列表中添加项目。
可以将待办事项标记为“已完成”。
可以删除待办事项。
// www.javascriptcn.com code example
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>To-do List</title>
<link rel="stylesheet" href="https://unpkg.com/tailwindcss@^1.9.0/dist/tailwind.min.css">
<style>
.card {
padding: 1rem;
margin-bottom: 1rem;
background-color: white;
box-shadow: rgba(0, 0, 0, 0.15) 0px 1px 3px 1px,
rgba(0, 0, 0, 0.05) 0px 1px 0px 0px;
border-radius: 0.25rem;
}
</style>
</head>
<body class="bg-gray-100">
<div class="container pt-10 pb-20 mx-auto">
<h1 class="text-4xl text-center mb-10">To-do List</h1>
<div class="w-full max-w-lg mx-auto bg-gray-200">
<form class="card p-3">
<div class="mb-2">
<input type="text" placeholder="Add to-do" class="w-full p-1" id="add-todo-input">
</div>
<button type="submit" class="btn bg-blue-500 text-white p-2 rounded-lg" id="add-todo-btn">Add</button>
</form>
<ul class="card p-3" id="todo-list"></ul>
</div>
</div>
<script>
const addButton = document.querySelector('#add-todo-btn')
const todoList = document.querySelector('#todo-list')
const input = document.querySelector('#add-todo-input')
let todos = []
addButton.addEventListener('click', (event) => {
event.preventDefault()
const newTodo = input.value
if (newTodo === '') {
return
}
const todo = {
id: Date.now(),
text: newTodo,
done: false
}
input.value = ''
todos.push(todo)
renderTodos()
})
function renderTodos() {
todoList.innerHTML = ''
todos.forEach(todo => {
const li = document.createElement('li')
li.classList.add('mb-2')
const checkbox = document.createElement('input')
checkbox.type = 'checkbox'
checkbox.checked = todo.done
checkbox.addEventListener('change', (event) => {
todo.done = event.target.checked
renderTodos()
})
li.appendChild(checkbox)
const span = document.createElement('span')
if (todo.done) {
span.classList.add('line-through')
}
span.textContent = todo.text
li.appendChild(span)
const removeButton = document.createElement('button')
removeButton.textContent = 'x'
removeButton.classList.add('ml-2', 'px-2', 'bg-red-500', 'text-white', 'rounded-lg', 'shadow-lg')
removeButton.addEventListener('click', (event) => {
event.preventDefault()
todos = todos.filter(t => t.id !== todo.id)
renderTodos()
})
li.appendChild(removeButton)
todoList.appendChild(li)
})
}
</script>
</body>
</html>现在,让我们来创建一个 Cypress 的测试文件,用来测试这个应用程序。
创建测试文件
我们可以按照以下步骤创建一个测试文件。
在项目根目录下,创建 cypress/integration 文件夹。
在 cypress/integration 文件夹中,创建一个待办事项测试用例的 JavaScript 文件。
模拟用户交互
我们可以使用 Cypress 来模拟用户的操作,比如点击、输入、选择等等。在这个示例中,我们将模拟用户进行以下操作:
向待办事项列表中添加新的项目。
将项目标记为已完成。
删除项目。
以下是一个测试代码的示例,你可以将其添加到测试文件中。
// www.javascriptcn.com code example
describe('to-do list', () => {
beforeEach(() => {
cy.visit('/')
cy.get('#add-todo-input').type('Buy milk')
cy.get('#add-todo-btn').click()
cy.get('#add-todo-input').type('Feed the cat')
cy.get('#add-todo-btn').click()
})
it('should allow items to be marked as done', () => {
cy.get('input[type="checkbox"]').first().check()
cy.get('span.line-through').should('have.length', 1)
})
it('should allow items to be deleted', () => {
cy.get('button').first().click()
cy.get('li').should('have.length', 1)
})
})在这个例子中,我们创建了两个待办事项条目,并对其进行了操作。第一个测试用例测试了可以将待办事项标记为“已完成”;第二个测试用例测试了可以删除待办事项。
运行测试
执行测试的命令非常简单,只需要在项目的根目录下输入以下命令即可。
npx cypress open
这个命令将会打开 Cypress 的测试运行器,你可以在其中执行测试。在运行器中,你可以选择针对哪个测试集运行测试,也可以选择一组特定的测试用例。
结语
本文介绍了 Cypress 的基础概念,以及如何使用 Cypress 进行集成测试。使用 Cypress 进行测试既能提高代码质量,也能减少测试的时间和成本。希望通过这篇文章,你能更好地理解 Cypress 并使用它进行集成测试。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d64d13a941bf7134c0193e