首页 > 解决方案 > Supertest / Jest / Node - 无法测试简单的路线

问题描述

我一直在尝试测试这条路线 4 个小时,但我似乎无法让它工作。

所以我有这样的路线:

api.post('/register', (req, res) => {
    let hasErrors = false
    if(!req.body.name || !req.body.email || !req.body.password){
        hasErrors = true
    }
    if(hasErrors){
        res.status(errCode.invalid_input).json({
            message: 'Invalid input'
        })
    }else{
    const NewUser = new User({
        _id : mongoose.Types.ObjectId(),
      name: req.body.name,
      email: req.body.email,
      password: req.body.password
    });
        NewUser.save().then(saved_user => {
      res.status(201).json({
        message: 'User registered',
        user: saved_user
      });
    }).catch(err => {
      res.status(500).json({
        message: err
      });
    })
  }
})

...我正在使用 Jest 和 Supertest 进行测试:

it('/register should return 201 if valid input', (done) => {
    //mock valid user input
    const NewUser = {
        'name': 'John Wick',
        'email': 'john@wick.com',
        'password': 'secret'
    }
    request(app)
        .post('/register')
        .type('form')
        .send(NewUser)
        .expect(201)
        .end((err) => {
            if (err) return done(err)
            done()
        })
})

测试正在等待中,它给了我Timeout - Async callback was not invoked within the 5000ms timeout specified by jest.setTimeout.

我已经使用 Postman 手动测试了这个 /register 端点,实际上,当我使用表单 URL 编码数据(名称、电子邮件、密码)调用 /register 端点时,它可以工作并在我的数据库中添加一个新条目。如果我将数据作为Multipart Form发送,它不起作用并给出 422 Invalid Input。也许这就是我的问题的原因?

干杯!

标签: javascriptnode.jsjestjssupertest

解决方案


推荐阅读