在 GitHub 上赢得“构建通过”徽章✅!使用 Travis CI 测试你的 Express 应用
Travis CI 为 GitHub 上的开源项目提供免费的测试构建。不接受他们的建议真是太愚蠢了。他们的邮件提醒功能之前已经多次拯救了我的项目。
在本教程中,我们将设置一个 Express 应用以进行持续集成 (CI)。每当我们提交到master
分支时,Travis CI 都会克隆我们的代码库,启动 Linux 云构建,安装所有必需的依赖项,并运行测试!希望测试能够顺利通过!如果没有通过,我们会收到警报。
安装
package.json
使用以下方式设置快速文件: npm init -y
。然后抓取 Express:npm i express --save
以及 supertest 和 Jest,我们的开发依赖项:npm i supertest jest --save-dev
。
或者克隆存储库,作为项目的实时示例!
将应用程序从 Express 中移除
Express 的默认 hello world 应用程序如下所示:
// app.js
const express = require('express');
const app = express();
const port = 3000;
app.get('/', async (req, res) => res.status(200).send('Hello World!'));
app.listen(port, () => console.log(`Our app listening on port ${port}!`));
这适用于手动测试。我们可以运行这个应用程序并检查是否返回了正确的页面——但如果我们有 50 个包含复杂逻辑的页面怎么办?我们希望将这个过程自动化。第一步是导出我们的app
对象。运行测试时,我们不需要实时的 HTTP 服务器。
让我们改变我们的 hello world 应用程序。
// app.js
const express = require('express');
const app = express();
app.get('/', async (req, res) => res.status(200).send('Hello World!'));
// Don't listen, just export
module.exports = app; // <--
太棒了。但是我们现在该如何启动我们的应用程序呢?我们将使用关注点分离,并将调用listen()
放在另一个名为 的文件中server.js
(该文件也使用该app
对象!)
// server.js
const app = require('./app');
const port = 3000;
app.listen(port, () => console.log(`Our app listening on port ${port}!`))
要启动我们的应用程序,我们现在使用node server.js
。让我们将其添加到我们的 中package.json
,以便人们可以简单地使用npm start
。默认情况下,Node.js 会查找server.js
文件,但让我们明确一点。
"scripts": {
"start": "node server.js"
},
测试
一种常见的模式是将测试放在根目录中名为 的文件夹中。另一种模式是在 之前插入__tests__
重复要测试的文件的名称。因此,。.test
.js
__tests__/app.test.js
我们将使用 Jest 作为测试运行器。Jest 会__tests__
在其默认搜索中查找文件内部,并运行找到的任何测试文件。您可以使用 自定义测试搜索--testMatch
。
默认情况下,[Jest] 会在文件夹中查找 .js、.jsx、.ts 和 .tsx 文件
__tests__
,以及任何带有 .test 或 .spec 后缀的文件(例如 Component.test.js 或 Component.spec.js)。它还会查找名为 test.js 或 spec.js 的文件。
在我们的测试中,supertest 会模拟对我们对象的请求。模拟请求比启动服务器并实时发送请求更快、更可预测。在需要时,app
它还能更轻松地编写设置和拆卸方法。
// __tests__/app.test.js
const app = require('../app');
const request = require('supertest');
// `describe` is used for test components
describe('GET /', () => {
// `it` is for individual tests
it('responds with 200', async () => {
await request(app)
.get('/')
.expect(200); // If the status code is not 200, this test will fail
});
})
让我们在代码中添加另一行,package.json
以便测试能够使用 运行。我们使用和别名的npm test
原因是,这样我们的软件对于第一次使用它的开发人员来说是可预测的,并且能够与其他软件包很好地兼容。start
test
"scripts": {
"start": "node server.js",
"test": "jest"
},
npm test
产生以下输出。
PASS __tests__/app.test.js
GET /
√ responds with 200 (39ms)
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 2.681s
Ran all test suites.
特拉维斯·CI
我们将此代码放入GitHub 仓库,并安装Travis CI GitHub App。请确保您正在测试的仓库已启用 Travis CI。
正如 Travis CI教程告诉我们的:
将 .travis.yml 文件添加到您的存储库以告诉 Travis CI 要做什么。
在我们的例子中,就是这么简单。除了指定测试构建使用的 Node.js 版本之外,我们不需要指定任何其他设置。Travis CI 将使用默认的测试别名npm test
。
# .travis.yml
language: node_js
node_js:
- lts/* # Long Term Support
提交并推送此文件到 GitHub 将立即加入测试构建队列。您可以在 观看构建的实时执行情况travis-ci.com/{your-username}/{your-repo}
,并稍后查看是否存在问题。您也可以使用此页面获取 Travis CI 构建状态徽章的 Markdown 文件!
如果您遇到问题,请发推文@healeycodes或在存储库中提出问题!
与 150 多名订阅我的关于编程和个人成长的新闻通讯的人一起!
我发布有关科技的推文@healeycodes。
文章来源:https://dev.to/healeycodes/earn-a-build-passing-badge-on-github--testing-your-express-app-with-travis-ci-1m2f