为什么这会导致路由,玩笑测试失败?

时间:2020-07-19 17:51:42

标签: javascript node.js express jestjs web-api-testing

我正在尝试了解tdd。我已经写了这个测试

it("should call TodoModel.findById", async () =>{
        await TodoController.getTodoById(req,res,next)
        req.params.todoId = "5f1216dd46a9c73dd812be36"
        expect(TodoModel.findById).toBeCalledWith("5f1216dd46a9c73dd812be36");
    })

用于以下功能

exports.getTodoById = async (res, req, next) => {
    const todoById = await TodoModel.findById(req.params.todoId)
}

但是我不断得到

●TodoController.getTodoById›应该调用TodoModel.findById

TypeError: Cannot read property 'todoId' of undefined

  22 | 
  23 | exports.getTodoById = async (res, req, next) => {
> 24 |     const todoById = await TodoModel.findById(req.params.todoId)
     |                                                         ^
  25 | }

  at Object.getTodoById (controllers/todo.controller.js:24:57)
  at Object.<anonymous> (tests/unit/todo.controller.test.js:54:30)

为什么会这样?我在测试中使用预设ID对其进行了定义。应该定义为afaik

1 个答案:

答案 0 :(得分:1)

您会看到函数中的第一个参数始终为req,因此请将函数更改为下面的

exports.getTodoById = async (req, res, next) => {
    const todoById = await TodoModel.findById(req.params.todoId)
}