【问题标题】:Jest unit testing API using express and mongoose使用 express 和 mongoose 的 Jest 单元测试 API
【发布时间】:2019-04-26 01:26:36
【问题描述】:

我正在用户 API 上尝试 TDD 方法。我想为我的功能集成单元测试:userRegister 和 userLogin

这是我的 app.js

'use strict'

const express = require('express')
const bodyParser = require('body-parser')
const passport = require('passport')
const users = require('../routes/users')


const app = express()
const port = 5000

app.get('/', (req, res) => {
   res.send({ msg: 'Test' })
})

//BodyParser Middleware
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())

//Passport middleware
app.use(passport.initialize())

//Initialize Routes

app.use('/api/users', users)

//Export app

module.exports = app

这是我的 userController.js:

'use strict'

const express = require('express')
const bcrypt = require('bcryptjs')
const jwt = require('jsonwebtoken')
const keys = require('../../../../config/keys')
const passport = require('passport')
const status = require('http-status-codes')

const User = require('../../models/User')


module.exports.test = (req, res) => {
    res.json({msg: 'Users works'})
}

module.exports.userRegister = (req, res) => {
    User.findOne({ email: req.body.email})
        .then(user => {
            if(user)
                return res.status(400).json({ userEmailerror: 'Email already 
exists'})
            else{
                const newUser = new User({
                    name: req.body.name,
                    email: req.body.email,
                    password: req.body.password
                })

                newUser.save()
                    .then(user => res.json(user))
                    .catch(err => console.log(err))

            }
        })
}

这是我的 userController.test.js

'use strict'

const mongoose = require('mongoose')
const testUserDB = require('../../../config/keys').testUsersMongURI
mongoose.connect(testUserDB)

const userController = require('../modules/controllers/userController')
const User = require('../models/User')

describe('register new user', () => {
    test('succesfully register a valid user', () => {
        const newUser = new User({
            name: 'test',
            email: 'test@gmail.com',
            password: 'test123'
        })
        const req = {body: {newUser}}

        userController.userRegister(req).then(user => {
            expect(user.name).toBe('test')
            expect(user.email).toBe('test@gmail.com')

        })


    })

})

我用来运行测试的脚本是:

"test": "jest --coverage",

我是 Javascript 和完整堆栈的新手,我收到的错误让我感到困惑

 RUNS  src/user/__tests__/userController.test.js
 FAIL  src/user/__tests__/userController.test.js
  register new user
    × succesfully register a valid user (19ms)

  ● register new user › succesfully register a valid user

    TypeError: Cannot read property 'then' of undefined

  16 |              })
  17 |              const req = {body: {newUser}}
> 18 |              userController.userRegister(req).then(user => {
     |              ^
  19 |                      expect(user.name).toBe('test')
  20 |                      expect(user.email).toBe('test@gmail.com')
  21 |

  at Object.test (src/user/__tests__/userController.test.js:18:3)

感谢您的帮助!

【问题讨论】:

  • 测试告诉你正确的事情:userController.userRegister 实际上并没有返回任何东西。
  • 我尝试以各种方式返回,但我得到了同样的错误。

标签: javascript express mongoose tdd jestjs


【解决方案1】:

userRegister 不返回承诺,因此您可以链接 .then 您可能希望将它返回的内容保存在变量中并检查该值。

let createdUser = userController.userRegister(req)
expect(createdUser.name).toBe('test')
expect(createdUser.email).toBe('test@gmail.com')

【讨论】:

    猜你喜欢
    • 2018-12-23
    • 2019-08-07
    • 2015-06-02
    • 2015-05-11
    • 1970-01-01
    • 2020-10-17
    • 2020-07-26
    • 2020-09-02
    • 1970-01-01
    相关资源
    最近更新 更多