【发布时间】:2019-10-20 12:29:30
【问题描述】:
在我的 React 故事书中,我希望能够玩弄使用 graphQL 查询和突变(用 Apollo 实现)的组件。
使用 MockedProvider 可以正常工作,只要我提前指定确切的突变,包括它们的输入。
我想知道是否有可能/如何不提前指定输入,以接受任何输入。
export const MyComponent = () => (
<Mutation mutation={gql`some mutation`}>
{(doMutation, { loading, error, data }) => (
<Button onClick={()=> doMutation({input: {
someInput: Math.rand()*10 // Would be fine if this was 1.
}}) />
{data ? <>Result: {data.someResult}</> : null}
)
</Mutation>
)
storiesOf('MyComponent', module)
.add('some story', () => (
<StaticRouter context={{}}>
<MockedProvider
mocks={[
{
request: {
query: gql`some query...`,
variables: { input: { someInput: '1' } },
},
result: { data: { someResult: '1' } },
},
]}
addTypename={true}
>
<MyComponent />
</MockedProvider>
</StaticRouter>
))
在上面的伪示例中,如果我发送 '1' 作为输入,故事书将正常工作,但不适用于任何其他数字 - 模拟必须完全匹配,否则我会得到“对于 someMutation 没有更多模拟响应变量 {...}"。
这在测试中不是问题,但在故事书中,能够使用任何值进行测试会很好。
【问题讨论】:
-
您好,很抱歉再次提出一个老问题,但您是否找到任何解决方案或解决方法?我有同样的问题,GQL 查询变量使用当前日期时间,无法在 Storybook 中模拟它......
-
嗨@dessskris 我找到了实现目标的方法,也许它也适合你。我所做的不是直接使用模拟提供程序,而是依赖注入突变/查询钩子。这样我就可以覆盖我想要的功能。我们使用了一个名为 MagneticDI 的好工具来帮助它变得非常简单。