如何使用Mocha和Chai测试Strapi端点 - LogRocket博客
测试是开发应用程序过程中常常被忽视的重要环节。它不仅为用户提供了对产品质量的信心,还能帮助开发者及时发现潜在的错误。在本教程中,我们将详细讲解如何使用 Mocha 和 Chai 测试基于 Strapi 构建的 RESTful API。Strapi 是一种开源的无头 JavaScript CMS,能够快速构建可定制的 API,而无需关注底层架构的复杂性。
先决条件
在开始之前,请确保您具备以下条件:
- 熟悉 JavaScript 编程。
安装 Strapi
首先,打开终端并运行以下命令来安装 Strapi:
npx create-strapi-app strapi-mocha-chai --quickstart
上述命令会初始化一个名为 strapi-mocha-chai 的 Strapi 项目,并使用 SQLite 数据库作为默认配置。如果您希望选择其他数据库,可以省略 --quickstart 标志。
安装完成后,应用程序会自动启动。如果没有启动,可以通过以下命令手动启动:
npm run develop
打开浏览器,访问 http://localhost:1337/,您将看到一个注册页面。完成注册后,您会进入 Strapi 的仪表板,从这里可以开始创建 API 端点。
创建 API 端点
我们将以一个简单的待办事项(To-Do)应用为例,创建以下 RESTful API 端点:
- POST
/todos:用于创建新的待办事项。
创建内容类型
- 在侧边栏中点击“插件”,然后选择“内容类型生成器”。
- 点击“创建新的集合类型”,输入
Todos作为显示名称并继续。 - 按照提示完成内容类型的配置。
配置权限
- 在“插件”部分选择“角色和权限”。
- 点击“公开”角色,并为以下操作授予权限:
- 创建(Create)
- 删除(Delete)
- 查找(Find)
- 查找单个(Find One)
完成后,您可以使用 Postman 测试这些端点是否正常工作。
添加测试依赖
在开始测试之前,您需要安装必要的依赖库。运行以下命令:
yarn add mocha chai chai-http cross-env
安装完成后,打开项目的 package.json 文件,在 scripts 部分添加以下测试命令:
"scripts": {
"develop": "strapi develop",
"start": "strapi start",
"build": "strapi build",
"strapi": "strapi",
"test": "cross-env NODE_ENV=test mocha --timeout 10000"
}
- Mocha:一个灵活的 JavaScript 测试框架,支持串行和异步测试。
- Chai:一个断言库,支持 BDD(行为驱动开发)和 TDD(测试驱动开发)。
- chai-http:一个插件,用于测试 HTTP 请求。
- cross-env:用于设置跨平台的环境变量。
配置测试环境
为了避免测试影响开发数据库,我们需要为测试创建一个独立的数据库配置。
创建测试数据库配置
运行以下命令:
cd config
mkdir env && cd env
mkdir test && cd test
touch database.json
在 config/env/test/database.json 文件中,添加以下内容:
{
"defaultConnection": "default",
"connections": {
"default": {
"connector": "bookshelf",
"settings": {
"client": "sqlite",
"filename": ".tmp/test.db"
},
"options": {
"useNullAsDefault": true,
"pool": {
"min": 0,
"max": 15
}
}
}
}
}
每次运行测试时,.tmp/test.db 文件都会被重新生成。
初始化 Strapi 实例
在测试之前,需要创建一个 Strapi 实例。运行以下命令:
mkdir tests
cd tests
mkdir helpers
touch helpers/strapi.js
在 tests/helpers/strapi.js 文件中,添加以下代码:
const Strapi = require('strapi');
const http = require('http');
let instance;
async function setupStrapi() {
if (!instance) {
await Strapi().load();
instance = strapi;
await instance.app
.use(instance.router.routes())
.use(instance.router.allowedMethods());
instance.server = http.createServer(instance.app.callback());
}
return instance;
}
module.exports = { setupStrapi };
编写测试用例
测试 Strapi 实例
在 tests 目录下创建 app.test.js 文件,并添加以下代码:
const fs = require('fs');
const { setupStrapi } = require('./helpers/strapi');
const chai = require('chai');
const expect = chai.expect;
before((done) => {
setupStrapi();
done();
});
after((done) => {
const dbSettings = strapi.config.get('database.connections.default.settings');
if (dbSettings && dbSettings.filename) {
const tmpDbFile = ${__dirname}/../${dbSettings.filename};
if (fs.existsSync(tmpDbFile)) {
fs.unlinkSync(tmpDbFile);
}
}
done();
});
it('strapi is defined', (done) => {
expect(strapi).to.exist;
done();
});
测试 API 端点
在 tests 目录下创建 todo/index.test.js 文件,并添加以下代码:
const { setupStrapi } = require('../helpers/strapi');
const chai = require('chai');
const chaiHttp = require('chai-http');
const expect = chai.expect;
chai.use(chaiHttp);
let app;
before(async () => {
app = await setupStrapi();
});
after((done) => {
const dbSettings = app.config.get('database.connections.default.settings');
if (dbSettings && dbSettings.filename) {
const tmpDbFile = ${__dirname}/../${dbSettings.filename};
if (fs.existsSync(tmpDbFile)) {
fs.unlinkSync(tmpDbFile);
}
}
done();
});
it('creates a todo item', (done) => {
chai
.request(app.server)
.post('/todos/')
.send({ title: 'Sample 2', completed: true })
.end((error, response) => {
expect(response).to.have.status(200);
expect(response.body).to.have.property('title');
done();
});
});
运行测试
在终端中运行以下命令以执行测试:
yarn test
如果一切正常,您将看到类似以下的测试结果:
总结
通过本教程,您学习了如何使用 Mocha 和 Chai 测试 Strapi 应用程序。测试是软件开发的重要组成部分,能够帮助您提高代码质量并减少潜在问题的发生。
希望本教程对您有所帮助!
原文链接: https://blog.logrocket.com/how-to-test-strapi-endpoints-with-mocha-and-chai/
热门API
- 1. AI文本生成
- 2. AI图片生成_文生图
- 3. AI图片生成_图生图
- 4. AI图像编辑
- 5. AI视频生成_文生视频
- 6. AI视频生成_图生视频
- 7. AI语音合成_文生语音
- 8. AI文本生成(中国)
最新文章
- DRF库详解:用Django轻松搭建功能强大的API服务
- 一文搞懂在 HTTP 如何 one-api 调用,实操指南来袭!
- 探索海洋数据的宝库:Amentum海洋数据探测API的潜力
- 云原生 API 网关 APISIX 入门教程
- API Key 密钥:深入理解与应用
- 2025年国内免费生成式 AI API 平台大盘点:探索国产大模型的开放能力
- 使用DeepSeek和Claude绘制出高质量的SVG 图片
- 精通REST API:解析iOS开发中的核心要点
- ASP.NET Core Web API 的授权指南 – Auth0
- Supertest:如何像专业人士一样测试API – Testim博客
- Next.js API 路由:GET 和 POST 请求示例
- Kimi K2 API 调用全指南:解锁国产大模型的强大能力