Tôi tạo một dự án bằng cách sử dụng create-app-component, cấu hình một ứng dụng mới có các tập lệnh xây dựng (babel, webpack, jest).Không thể giả lập mô-đun có tính năng kích động và các cuộc gọi hàm thử nghiệm
Tôi đã viết một thành phần React mà tôi đang thử nghiệm. Thành phần này yêu cầu một tệp javascript khác, hiển thị một hàm.
search.js My nộp
export {
search,
}
function search(){
// does things
return Promise.resolve('foo')
}
My phản ứng thành phần:
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}
/>
}
}
Trong các thử nghiệm đơn vị của tôi, tôi muốn kiểm tra xem phương pháp search
được gọi với các đối số chính xác.
xét nghiệm của tôi trông giống như thế:
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);
})
})
});
Tôi đã có một thời gian khó khăn để tìm ra cách để làm cho jest.mock
làm việc, bởi vì nó đòi hỏi các biến phải bắt đầu bằng mock
.
Nhưng nếu tôi muốn kiểm tra các đối số theo phương pháp search
, tôi cần phải thực hiện chức năng mô phỏng trong các thử nghiệm của mình.
Nếu tôi thay đổi phần chế giễu, để sử dụng một biến:
const mockSearch = jest.fn(() => mockPromise)
jest.mock('./search.js',() => {
return { search: mockSearch};
});
tôi nhận được lỗi này:
TypeError: (0 , _search.search) is not a function
Dù tôi cố gắng truy cập vào jest.fn
và kiểm tra các đối số, tôi không thể làm cho nó hoạt động.
Tôi đang làm gì sai?
Cảm ơn phản hồi rất chi tiết này. Tôi chắc chắn sẽ thử giải pháp của bạn. – ghusse
Trong khi giải pháp trước đây về mặt kỹ thuật nên hoạt động (và thậm chí tôi đã tìm ra lý do tại sao 'var' là cần thiết), bây giờ tôi đã chỉnh sửa câu trả lời để sử dụng một câu lệnh ít xấu xí hơn, IMO. – Tomty
Cảm ơn sự giúp đỡ của bạn. Với giải pháp thứ hai, tôi gặp lỗi 'không thể đặt tìm kiếm thuộc tính của tìm kiếm'. Giải pháp đầu tiên hoạt động: Tôi cần phải nhập lib và gọi jest một lần cho tất cả (không phải trong trình kích hoạt beforeEach). – ghusse