如何解决类型错误:roomsRepo.addOneRoom 不是函数
所以我正在使用 MochaJS、Sinonjs、Chai、assert 和 rewire 对我的应用程序进行单元测试。我收到以下错误。我正在尝试测试在 POST 方法中作为参数传递的 POST 方法的处理程序。我认为我没有正确地存根和模拟。
TypeError: roomsRepo.addOneRoom is not a function
at D:\Work\RestAPI\controllers\roomsController.js:10:29
at async Context.<anonymous> (test\testRoomController.js:106:24)
我正在测试的代码是这样的:
function createRoomHandler (db) {
return async (request,reply) => {
try {
let newRoom = await request.body;
await roomsRepo.addOneRoom(db,newRoom);
return newRoom
} catch (error) { throw error }
};
}
fastify.post('/rooms',roomOpts.addRoomOpts,createRoomHandler(db));
我的单元测试代码如下:
describe("POST /rooms request handler unit tests",() => {
const createRoomHandler = rewired.__get__("createRoomHandler")
const sandBox = sinon.createSandBox();
it("should delete a room and return its number",async () => {
const req = {
res: {
"statusCode": 200,"headers": {
"content-type": "application/json"
}
},body: {
"status": "success",data: {
"floor": 1,"sqm": 20,"capacity": 5,"features": {
"videoProjector": 1,"stage": 2
}
}
}
}
const res = {
"data": {
"floor": 1,"features": {
"videoProjector": 1,"stage": 2
}
}
}
const insertOne = sandBox.stub().returns()
const db = {
rooms: { insertOne }
}
const mockedAddOneRoom = sandBox.stub().resolves()
const roomsRepo = {mockedAddOneRoom}
const stubbedAddOneRoom = rewired.__set__({ roomsRepo: roomsRepo })
const handler = createRoomHandler(db);
const result = await handler(req.body.data,res);
sandBox.assert.calledOnceWithExactly(mockedAddOneRoom,db,req.body.data)
const order = [
mockedAddOneRoom
]
sandBox.assert.callOrder(...order)
expect(result).be.equal(res.data)
stubbedAddOneRoom()
})
})
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。