Я создаю проект с помощью create-app-component, который настраивает новое приложение со сценариями сборки (babel, webpack, jest).
Я написал компонент React, который я пытаюсь проверить. Компонент требует другой файл javascript, отображающий функцию.
Мой файл search.js
export {
search,
}
function search(){
// does things
return Promise.resolve('foo')
}
Мой реактивный компонент:
import React from 'react'
import { search } from './search.js'
import SearchResults from './SearchResults'
export default SearchContainer {
constructor(){
this.state = {
query: "hello world"
}
}
componentDidMount(){
search(this.state.query)
.then(result => { this.setState({ result, })})
}
render() {
return <SearchResults
result={this.state.result}
/>
}
}
В моих модульных тестах я хочу проверить, вызван ли search
метода правильными аргументами.
Мои тесты выглядят примерно так:
import React from 'react';
import { shallow } from 'enzyme';
import should from 'should/as-function';
import SearchResults from './SearchResults';
let mockPromise;
jest.mock('./search.js', () => {
return { search: jest.fn(() => mockPromise)};
});
import SearchContainer from './SearchContainer';
describe('<SearchContainer />', () => {
it('should call the search module', () => {
const result = { foo: 'bar' }
mockPromise = Promise.resolve(result);
const wrapper = shallow(<SearchContainer />);
wrapper.instance().componentDidMount();
mockPromise.then(() => {
const searchResults = wrapper.find(SearchResults).first();
should(searchResults.prop('result')).equal(result);
})
})
});
У меня уже было трудное время, чтобы выяснить, как сделать jest.mock
работу, потому что она требует переменных, которые будут префиксом mock
.
Но если я хочу проверить аргументы метода search
, мне нужно сделать издеваемую функцию доступной в моих тестах.
Если я преобразую насмешку, используйте переменную:
const mockSearch = jest.fn(() => mockPromise)
jest.mock('./search.js', () => {
return { search: mockSearch};
});
Я получаю эту ошибку:
TypeError: (0, _search.search) не является функцией
Независимо от того, что я пытаюсь получить доступ к jest.fn
и проверять аргументы, я не могу заставить его работать.
Что я делаю не так?