Как исправить это «Не удается прочитать свойство undefined» при тестировании? - PullRequest
1 голос
/ 03 мая 2019

Я пытаюсь запустить тест с использованием Jest для этого API-интерфейса Nodejs. Хотя все работает, когда я запускаю приложение, оно терпит неудачу и возвращает ошибку

TypeError: Невозможно прочитать свойство 'store' из неопределенного

Тестовый код:

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()

Для более подробной информации, я делюсь этим проектом в github .

1 Ответ

0 голосов
/ 03 мая 2019

попробуйте этот код

Код теста

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...