微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

类型错误:roomsRepo.addOneRoom 不是函数

如何解决类型错误: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 }
};

}

在post方法中作为参数传递的函数

    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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?