2017-01-24 2 views
18

У меня есть реагировать компонент (это упрощено для того, чтобы продемонстрировать этот вопрос):Как издеваюсь Реагировать компоненты методов с шуткой и фермента

class MyComponent extends Component { 
    handleNameInput = (value) => { 
     this.searchValue(value); 
    }; 

    searchValue = (value) => { 
     //Do something 
    } 

    render() { 
     reutrn(<div></div>) 
    } 
} 

Теперь я хочу, чтобы проверить, что handleNameInput() звонков searchValue с значением параметра ,

Для этого я хотел бы создать jest mock function, который заменяет компонентный метод.

Вот мой тест до сих пор:

it('handleNameInput',() => { 
    let wrapper = shallow(<MyComponent/>); 
    wrapper.searchDish = jest.fn(); 
    wrapper.instance().handleNameInput('BoB'); 
    expect(wrapper.searchDish).toBeCalledWith('BoB'); 
}) 

Но все это я получаю в консоли SyntaxError:

SyntaxError

at XMLHttpRequest.open (node_modules/jsdom/lib/jsdom/living/xmlhttprequest.js:458:15) 
    at run_xhr (node_modules/browser-request/index.js:215:7) 
    at request (node_modules/browser-request/index.js:179:10) 
    at DishAdmin._this.searchDish (src/main/react/components/DishAdmin.js:155:68) 
    at DishAdmin._this.handleNameInput (src/main/react/components/DishAdmin.js:94:45) 
    at Object.<anonymous> (src/main/react/tests/DishAdmin.test.js:122:24) 

Так что мой вопрос, как я правильно макет компонентов методов с ферментом?

+0

Что синтаксическая ошибка? –

+0

Добавлено в вопрос :) –

+0

Не зная точно, что источник не может помочь - я не вижу никаких синтаксических ошибок в коде, который вы опубликовали. –

ответ

35

Метода может быть издевался таким образом:

it('handleNameInput',() => { 
    let wrapper = shallow(<MyComponent/>); 
    wrapper.instance().searchDish = jest.fn(); 
    wrapper.update(); 
    wrapper.instance().handleNameInput('BoB'); 
    expect(wrapper.instance().searchDish).toBeCalledWith('BoB'); 
}) 

Вы также должны вызвать .update на обертке тестируемого компонента, чтобы зарегистрировать фиктивную функцию должным образом.

Синтаксическая ошибка исходила из неправильного подсчета (вам нужно назначить метод экземпляру). Мои другие проблемы исходили из того, что не вызывали .update() после издевательств над методом.

+0

Для меня это бросает и ошибается с 'expect (wrapper.searchDish)' - не макет функция или шпион. Только когда я перехожу к 'ожидать (wrapper.instance(). SearchDish), он работает правильно. –

+0

@NikSumeiko даже я получал ту же ошибку, я сохранил функцию mock в переменной и проверил 'toBeCalledWith' на то: ' const searchDishMock = jest.fn(); ... ожидать (поискDishMock) .toBeCalledWith ('BoB'); ' – Yusufali2205

+0

Если' wrapper.update(); 'не работает, вы также можете попробовать' wrapper.instance(). ForceUpdate(); ' –

0

@ ответ Miha работал с небольшим изменением:

it('handleNameInput',() => { 
    let wrapper = shallow(<MyComponent/>); 
    const searchDishMock = jest.fn(); 
    wrapper.instance().searchDish = searchDishMock; 
    wrapper.update(); 
    wrapper.instance().handleNameInput('BoB'); 
    expect(searchDishMock).toBeCalledWith('BoB'); 
}) 
Смежные вопросы