2017-01-20 8 views
1

У меня есть модуль, который должен вызывать локальную обертку. Чтобы проверить, вызывает ли модуль ПОЛУЧИТЕ выборки обертки правильно я насмешливый и возврат шпиона, как так:Почему шутка не издевается над этим модулем?

// get.js 
import fetch from '../fetch' 

const get = (endpoint, token) => { 
    const headers = new Headers() 

    if (token) { 
    headers.append('Authorization', `Bearer ${token}`) 
    } 

    const init = { 
    headers, 
    method: 'GET' 
    } 

    return fetch(new Request(endpoint, init)) 
} 

export default get 
// get.test.js 
import 'isomorphic-fetch' 
import get from './get' 

describe('get',() => { 
    it('calls fetch with a request',() => { 
    // I'm expecting this spy to be called by get 
    const mockFetch = jest.fn() 
    jest.mock('../fetch',() => jest.fn(mockFetch)) 

    get('endpoint', 'token') 

    expect(mockFetch).toHaveBeenCalled() 
    }) 
}) 

Но когда я запускаю его шуткой терпит неудачу с:

expect(jest.fn()).toHaveBeenCalled() 

Expected mock function to have been called. 

Так почему же он не называет макет?

ответ

1

Проблема в том, что все операторы jest.mock поднимаются в верхней части блока кода. Таким образом, даже вы пишете его в середине вашего теста, он будет запущен как первый оператор вашего теста, и нет никакого способа получить конкретное возвращаемое значение. Итак, как это исправить. Сначала, но фальшивый оператор после ваших импортных заявлений, чтобы сделать ясно, что насмешливое не происходит в тесте. Затем импортируйте модуль в свой тест. так что это будет результат jest.fn() в вашем заявлении. Поскольку fetch является шпионом, вы можете проверить на этом, что был вызван fetch.

import 'isomorphic-fetch' 
import get from './get' 
import fetch from '../fetch' 
jest.mock('../fetch',() => jest.fn()) 

describe('get',() => { 
    it('calls fetch with a request',() => { 
    get('endpoint', 'token') 
    expect(fetch).toHaveBeenCalled() 
    }) 
}) 
+0

Но документы говорят: 'Примечание: при использовании babel-jest призывы к mock будут автоматически подняты в верхней части блока кода. Используйте doMock, если вы хотите явно избегать этого поведения. «Он должен оставаться в пределах одного и того же блока, а не в верхней части файла? – vsjn3290ckjnaoij2jikndckjb

+0

Жаль, что я был немного не прав на этом этапе. Даже тогда перед тем, как вы сможете объявить 'const mockFetch = jest.fn()'. –

 Смежные вопросы

  • Нет связанных вопросов^_^