Jest макет субмодульная функция - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть этот модуль узла с именем client.Он имеет следующую структуру:

//index.js
import users from "./users"

export default { users }

И:

//users.js
export default { getUser }
function getUser(username) {
    ...
    return {role: userRole}  
}

Я хочу смоделировать эту функцию getUser (имя пользователя) в моих тестах.Таким образом, я мог бы вызвать что-то вроде:

client.users.getUser.mockResolvedValueOnce({role: "manager"}) 

Мой заголовок теста выглядит так:

let client = jest.genMockFromModule('client').default;
client.users.getUser = jest.fn();

Но, выполняя мой тест, я получаю следующую ошибку, когда мой исходный код вызывает client.users.getUser.

TypeError: Cannot read property 'users' of undefined

  58 | 
  59 |     // Retrieve user and then return its projects
> 60 |     client.users.getUser(username)
     |                  ^
  61 |         .then(user => {
  62 |             if (!user) {
  63 |                 throw new Error(`User ${username} not found`)

  at Object.getUser (node_modules/client/build/users.js:26:45)
  at Object.getUser [as insert] (src/web/controller/projects.js:60:18)
  at Object.insert (src/web/controller/projects.test.js:80:18)

1 Ответ

0 голосов
/ 22 февраля 2019

Вы можете просто смоделировать модуль //users.js следующим образом:

jest.mock('./users.js', () => ({getUser: () => ({role: "manager"})})) //note that the path is relative to the test

, если вам нужны разные возвращаемые значения во время ваших тестов, вы можете имитировать его, чтобы вернуть шпион и установить возвращаемое значение в тестах.:

import {getUsers} from './users'
jest.mock('./users.js', () => ({getUser: jest.fn()})) 

it('does something', () => {
 getUser.mockImplementation(() => ({role: "manager"}))
})
it('does something else', () => {
 getUser.mockImplementation(() => ({role: "user"}))
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...