我正在尝试测试运行突变后应使用新数据更新的组件。我在下面发布了示例代码。您可以找到它on GitHub as runnable repository as well。
不幸的是,我没有找到一种方法来突变后实际更新import android.widget.TextView;
import android.os.Bundle;
import android.app.Activity;
public class Test extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final TextView tv = new TextView(this);
tv.setText("Hello World!");
setContentView(tv);
}
}
的商店数据。当您运行测试时,您可以看到正在执行该突变,并且此后该组件被渲染。但是,由于突变没有做任何事情,因此不会添加新的待办事项。
有人可以告诉我使用MockedProvider
时如何通过突变来更改数据吗?
测试查询和变异:
MockedProvider
测试组件:
const TODOS_QUERY = gql`
query todos {
todos {
title
}
}
`
const ADD_TODO_MUTATION = gql`
mutation addTodo($title: String!) {
addTodo(title: $title)
}
`;
测试实现。这将使用酶安装组件,模拟单击按钮以执行突变,并等到再次渲染组件。
const Component = () => (
<Query query={TODOS_QUERY}>
{
({ data }) => {
console.log('render'); return (
<Mutation mutation={ADD_TODO_MUTATION}>
{
addTodo => (
<div>
<button onClick={() => { console.log('addTodo'); addTodo({ variables: { title: 'My new todo' } }) }}>
Click me to add a todo!
</button>
{
(data.todos || []).map(({ title }, index) => (
<div key={index} className="todo-item">
{title}
</div>
))
}
</div>
)
}
</Mutation>
)}
}
</Query>
);
非常感谢您的帮助!
答案 0 :(得分:0)
MockedProvider接受cache
道具,您可以将其传递给自己的缓存(初始化ApolloClient时使用的缓存)。这样可以使您在测试中自动进行缓存更新。
您可能需要删除addTypeName=false
才能使其正常工作,并提供包括__typename
在内的模拟内容。