好了,这是一个相当老问题,但我会在这里发布一个答案,以供任何需要答案的开发合作伙伴。 请如果这是很好的一个人,这是不够清晰的只是让我知道,我会更新我的答案
为了使其工作(react-apollo
和react-storybook
),你有几种方法从我最喜欢的会使用MockedProvider
从react-apollo
你基本上想要做的是告诉你的用户界面,每当预期请求被解雇它应该响应与预期的响应,让我们的使用需要的用户数据正确地呈现组件<Avatar>
做出了榜样:
Avatar.js
class Avatar {
// ...
render() {
// pretty avatar layout
}
}
export const COLLABORATOR_QUERY = gql`
query GetCollaborator($id: ID!) {
Collaborator(id: $id) {
id
firstName
lastName
avatarImgUrl
}
}
`;
const AvatarWithData = graphql(
COLLABORATOR_QUERY, {
options: {
variables: {
// let's suppose that we got a static variable here to simplify the example
id: '1'
}
}
}
)(Avatar);
export default AvatarWithData;
.stories/index.js
import { addTypenameToDocument } from 'apollo-client/queries/queryTransform';
import { MockedProvider } from 'react-apollo/lib/test-utils';
import { COLLABORATOR_QUERY } from '../js/components/Avatar';
import Avatar from '../js/components/Avatar';
const mockedData = {
Collaborator: {
id: '1',
firstName: 'Char',
lastName: 'Mander',
avatarImgUrl: 'https://img.pokemondb.net/artwork/charmander.jpg',
__typename: 'Collaborator'
}
};
const query = addTypenameToDocument(USER_QUERY);
const variables = { id: '1' };
let mocks = [{ request: { query, variables }, result: { data: mockedData } }];
storiesOf('Mocked', module)
.addDecorator((story) => (
<MockedProvider mocks={mocks}>
{story()}
</MockedProvider>
)).add('Avatar',() => {
return (<Avatar />);
});
我得到了他们使用打字稿和我的样板创建反应的应用程序内这个addTypenameToDocument
进口造成一定的问题,有什么不对,但我所做的就是将该文件中的逻辑包含在我的项目中(非常肮脏,对此感到抱歉)。
UPDATE:避免问题进口addTypenameToDocument
因为我使用create-react-project
是运行eject
命令,并添加以下到package.json
开玩笑配置我做了什么:
"transformIgnorePatterns": ["[/\\\\]node_modules[/\\\\](?!(apollo-client)/).+\\.(js|jsx)$"]
问题s表示的家伙在apollo-client
都有自己建造文件中ES6,你会得到语法错误,最重要的是,如果你使用的是发生反应,故事书,你可能会想this配置添加到故事书的配置的WebPack。
前尽一切我发现这一点:https://dev-blog.apollodata.com/seamless-integration-for-graphql-and-react-6ffc0ad3fead#.1um2z7abl的试验段有一个很好的做法太(几乎相同),但他们不使用addTypenameToDocument
我还没有尝试自己还没有,但如果它的工作原理您将能够在不运行react-create-project的eject命令的情况下进行测试
除此之外,您应该确保您的查询和变量完全匹配您的UI组件发出的请求,否则您将收到一个没有被嘲笑的错误,然后你就准备好了。
谢谢!总是回答以前的问题,因为我们刚刚把这个任务放在我们的积压工作中。但现在我们可以重新排列优先顺序并尝试您的解决方案。一旦我们尝试了,我会回复评论,如果它能够正常工作,我会接受答案。 –
不错@JohnShelley感谢您的反馈我也更新了一些最近的调查结果!干杯! –