ran*_*dal 7 reactjs jestjs enzyme
收到此错误
匹配器错误:接收的值必须是模拟或间谍函数
Run Code Online (Sandbox Code Playgroud)Received has type: object Received has value: {}
但是,我认为我不应该收到此错误,因为我正在使用jest.fn. 所以我在嘲笑这个功能。
describe('Should simulate button click', ()=> {
it('should simulate button click', () => {
// add the name of the prop, which in this case ites called onItemAdded prop,
// then use jest.fn()
const wrapper = shallow(<TodoAddItem onItemAdded={() => jest.fn()}/>)
// console.log('props',wrapper.find('button').props());
wrapper.find('button').simulate('click');
expect(wrapper).toHaveBeenCalled(); // error happens when this executes
})
})
Run Code Online (Sandbox Code Playgroud)
todo-add-item.js
import React, { Component } from 'react';
import './todo-add-item.css';
export default class TodoAddItem extends Component {
render() {
return (
<div className="todo-add-item">
<button
className="test-button btn btn-outline-secondary float-left"
onClick={() => this.props.onItemAdded('Hello world')}>
Add Item
</button>
</div>
);
}
}
Run Code Online (Sandbox Code Playgroud)
app.js(使用此文件中的组件)
import React, { Component } from 'react';
import AppHeader from '../app-header';
import SearchPanel from '../search-panel';
import TodoList from '../todo-list';
import ItemStatusFilter from '../item-status-filter';
import TodoAddItem from '../todo-add-item';
import './app.css';
export default class App extends Component {
constructor() {
super();
this.createTodoItem = (label) => {
return {
label,
important: false,
done: false,
id: this.maxId++
}
};
this.maxId = 100;
this.state = {
todoData: [
this.createTodoItem('Drink Coffee'),
this.createTodoItem('Make Awesome App'),
this.createTodoItem('Have a lunch')
]
};
this.deleteItem = (id) => {
this.setState(({ todoData }) => {
const idx = todoData.findIndex((el) => el.id === id);
const newArray = [
...todoData.slice(0, idx),
...todoData.slice(idx + 1)
];
return {
todoData: newArray
};
});
};
this.addItem = (text) => {
const newItem = this.createTodoItem(text);
this.setState(({ todoData }) => {
const newArray = [
...todoData,
newItem
];
return {
todoData: newArray
};
});
};
this.onToggleImportant = (id) => {
console.log('toggle important', id);
};
this.onToggleDone = (id) => {
console.log('toggle done', id);
};
};
render() {
return (
<div className="todo-app">
<AppHeader toDo={ 1 } done={ 3 } />
<div className="top-panel d-flex">
<SearchPanel />
<ItemStatusFilter />
</div>
<TodoList
todos={ this.state.todoData }
onDeleted={ this.deleteItem }
onToggleImportant={ this.onToggleImportant }
onToggleDone={ this.onToggleDone } />
<TodoAddItem onItemAdded={ this.addItem } />
</div>
);
};
};
Run Code Online (Sandbox Code Playgroud)
对我来说,可以替换下一个:
const setCategories = () => jest.fn();
Run Code Online (Sandbox Code Playgroud)
有了这个:
const setCategories = jest.fn();
Run Code Online (Sandbox Code Playgroud)
我想你应该在你的代码中设置jest.fn或jest.fn()。
我不是 100% 肯定,但我相信你应该做这样的事情:
describe('should simulate button click', () => {
it('should simulate button click', () => {
const mockedFunction = jest.fn();
const wrapper = shallow(<TodoAddItem onItemAdded={ mockedFunction } />);
wrapper.find('button').simulate('click');
expect(mockedFunction).toHaveBeenCalled();
});
});
Run Code Online (Sandbox Code Playgroud)
您正在测试onItemAdded单击<TodoAddItem />组件时是否调用了该函数。因此,您必须首先使用模拟它jest.fn,然后检查模拟点击后是否调用了模拟函数。
| 归档时间: |
|
| 查看次数: |
17845 次 |
| 最近记录: |