Как установить свойства класса внутри фиктивной функции с помощью jest - PullRequest
0 голосов
/ 20 марта 2020

У меня проблемы с фиктивными функциями, которые передают класс в качестве параметра. По какой-то причине кажется, что он не может правильно утверждать содержимое

// ErrorHandler.js
class ErrorHandler extends Error {
  constructor(status, reason) {
    super();
    this.status = status;
    this.reason = reason;
  }
}

export {
  ErrorHandler
}

// express file express.js
const method = async (req, res, next) => {
  try {
    throw new ErrorHandler(401, 'error')
    next()
  } catch (error) {
    next(error)
  }
}

// test file
it('should call the next method with the proper error', async () => {
 const request = {
   body: {}
 }
 const next = jest.fn()
 const response = mockResponse() // here it's just a simple mock
 await method(request, response, next)

 expect(next).toHaveBeenCalledWith(
  // here the problem is that it doesn't seem to assert the parameters
  // and this test is passing
  new ErrorHandler('random text')
 )
})

Я пытался насмехаться над классом ErrorHandler, но затем выдает еще одну ошибку, связанную с тем, что он больше не может сравнивать следующий метод

1 Ответ

1 голос
/ 20 марта 2020

Проблема в том, что Jest пытается сравнить два объекта ошибки и не знает как. Это можно увидеть с помощью простого утверждения:

expect(new ErrorHandler(404, 'not found')).not.toEqual(new ErrorHandler(401, 'unauthorized'))

с результатом:

expect(received).not.toEqual(expected) // deep equality

Expected: not [Error]

Вы должны быть более точными c, например:

expect(next).toHaveBeenCalled();
const [err] = next.mock.calls[0];
expect(err).toMatchObject({ status: 401, reason: 'error' });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...