mongodb - 用 supertest 测试 POST 仍然会创建新文档
问题描述
我编写了一个名为bookService的服务,目前遇到的问题是,每当我测试POST使用 Supertest 和 Expect 在 Hapi (v17) 中请求时,测试都会在数据库中创建一条新记录,因此它实际上并没有包装我的应用程序已经进口了。
我目前正在将bookService导入server.js ,我在server.js中的路由片段如下所示:
服务器.js
const Hapi = require('hapi');
const mongoose = require('mongoose');
const bookService = require('./book-service');
server.route({
method: 'POST',
path: '/books',
handler: bookService.createBook
});
const init = async () => {
await server.start();
mongoose.connect(MongoDBUrl, { useNewUrlParser: true }).then(() => {
console.log(`Connected to Mongo server at ${MongoDBUrl}`)
}, err => {
console.log(err)
});
};
init();
module.exports = { server };
以下片段显示了bookService为POST请求创建的函数:
bookService.js
const { Book } = require('./models/book');
const createBook = (req, h) => {
const book = new Book({
author: req.payload.author,
title: req.payload.title,
year: req.payload.year
});
return Book.create(book).then((book) => {
return h.response({
message: "Book created successfully",
book
}).code(200);
}).catch((err) => {
return {err};
});
};
module.exports = { createBook };
我正在使用server.listener作为 supertest 的“请求”库的参数,但仍然遇到这个问题。我的测试通过了,但是每当我运行测试时,它实际上都会向 Mongodb 添加一个新的书籍文档。Supertest和Hapi有什么我不知道的问题吗?
server.test.js
const expect = require('expect');
const request = require('supertest');
const { server } = require('../server/server');
describe('POST /books', () => {
it('should create a new book', (done) => {
let book = {
author: "Steinbeck",
title: "Grapes of Wrath",
year: "1939"
};
request(server.listener)
.post('/books')
.send(book)
.expect(200)
.expect((res) => {
expect(res.body.book.author).toBe(book.author);
expect(res.body.book.title).toBe(book.title);
expect(res.body.book.year).toBe(book.year);
})
.end(done);
});
});
预先感谢您的任何帮助。
解决方案
点亮,
在集成测试中需要一本在您的案例中创建的新书。这就是它的工作原理,它总是在你的 mongodb 中创建一本新书。
如果您希望不更改数据库,也许您可以尝试模拟数据库功能的单元测试,这样它就可以防止创建新书。
推荐阅读
- java - 如何使用两个类获得两个变量的总和
- javascript - 使用正则表达式从 XML 中提取字符串
- django - 在 DRF 创建表单上添加 Django 传单位置选择器
- python - 如何增加 axs[i].title.set_text 上的标题字体大小
- ios - SwiftUI:iPad 弹出框上奇怪的关闭动画
- javascript - 在不丢失原始堆栈的情况下覆盖 console.log 方法 - javascript
- struct - LLVM 后端如何处理具有动态访问权限的结构的 getelementptr?
- cryptography - 无法将 pkcs11-tool 与自定义 hsm 角色一起使用
- automation - 我正在尝试使用 7-zip 和 AutoHotKey 提取文件夹,但脚本仅在新窗口中打开压缩文件夹
- drools - 如何使用 Drools Api 声明窗口