【问题标题】:How to fix this "Cannot read property of undefined" when testing?测试时如何解决此“无法读取未定义的属性”?
【发布时间】:2019-09-21 23:36:15
【问题描述】:

我正在尝试使用 Jest 对此 Nodejs API 运行测试。虽然我运行应用程序时一切正常,但它失败并返回错误

TypeError:无法读取未定义的属性“存储”

测试代码:

const request = require('supertest')

const server = require('../../server')
const { User } = require('../../app/models/User')

describe('User', () => {
  test('should create user', async () => {
    const user = await User.store({
      name: 'Marcelo',
      email: 'marcelo@vuttr.com',
      password: '123456'
    })

    const response = await request(server)
      .post('/user')
      .send({
        name: user.name,
        email: user.email,
        password: user.password
      })

    expect(response.status).toBe(200)
  })
})

控制器:

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

class UserController {
  async store (req, res) {
    const { email } = req.body

    if (await User.findOne({ email })) {
      return res.status(400).json({ error: 'User already exists' })
    }

    const user = await User.create(req.body)

    return res.json(user)
  }
}

module.exports = new UserController()

更多详情,我分享this project in github

【问题讨论】:

  • 您不应该导入UserController 并在其上调用.store() 而不是User 模型吗?

标签: node.js express jestjs


【解决方案1】:

试试这个代码

测试代码

const request = require('supertest')

const server = require('../../server')
const { User } = require('../../app/models/User')
const { UserController } = require('../../UserController')

describe('User', () => {
  test('should create user', async () => {
    const user = await UserController({
      name: 'Marcelo',
      email: 'marcelo@vuttr.com',
      password: '123456'
    })

    const response = await request(server)
      .post('/user')
      .send({
        name: user.name,
        email: user.email,
        password: user.password
      })

    expect(response.status).toBe(200)
  })
})

控制器:

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

const UserController = async(req, res) => {
    const { email } = req.body
    if (await User.findOne({ email })) {
      return res.status(400).json({ error: 'User already exists' })
    }

    const user = await User.create(req.body);

    return res.status(201).json(user);
}

module.exports = UserController;

【讨论】:

    猜你喜欢
    • 2019-04-30
    • 2021-05-10
    • 2022-01-26
    • 2019-11-21
    • 2022-11-13
    • 1970-01-01
    • 2018-12-21
    • 2020-11-17
    • 2020-07-23
    相关资源
    最近更新 更多