まあ、これはかなりあります私は答えを必要としている他の開発パートナーのためにここに答えを掲示します。 これが誰かのために良いですし、それが明確でない場合は、十分なちょうど私に知らせてくださいと私は
ためには、それがそこから私のお気に入りはなりますが、いくつかのアプローチを持っている(react-apollo
とreact-storybook
)を動作させるために私の答えに更新されますMockedProvider
からreact-apollo
まであなたが基本的にしたいのは、期待されるリクエストが発生したときにいつも期待されるレスポンスでレスポンスする必要があることをUIに伝えることです。ユーザーデータを正しくレンダリングする必要があるコンポーネント<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 />);
});
私は、彼らはtypescriptですを使用して、私の定型作成反応するアプリで何か問題がある。このaddTypenameToDocument
輸入原因でいくつかの問題を得たが、どのようなI私のプロジェクト内のそのファイルにロジックを含めることです(非常に汚い、申し訳ありません)。
UPDATE:輸入問題を避けるために、私はcreate-react-project
がpackage.json
冗談の設定に次のeject
のコマンドを実行して追加することです使用していて、私がやっていることaddTypenameToDocument
:
"transformIgnorePatterns": ["[/\\\\]node_modules[/\\\\](?!(apollo-client)/).+\\.(js|jsx)$"]
問題の男は、そのapollo-client
にはビルドされたファイル内にes6があり、反応のストーリーブックを使用している場合は、ストーリーブックのwebpack設定にthisの設定を追加することができます。テストセクションのhttps://dev-blog.apollodata.com/seamless-integration-for-graphql-and-react-6ffc0ad3fead#.1um2z7ablが優れたアプローチは、あまりにも(ほぼ同じ)であるが、彼らは、私はまだ自分自身を試していないが、それが動作するかどうかaddTypenameToDocument
を使用していない:私はこれを発見したTHATのすべてを行う前に
react-create-projectのejectコマンドを実行せずにテストすることができます
それ以外は、クエリと変数がUIコンポーネントの要求と正確に一致することを確認してください嘲笑されていないエラーが見つかりました。そしてあなたは転がる準備ができています。
ありがとうございます!この仕事をバックログに入れてしまったので、常に古い質問に答えてください。しかし今度は、ソリューションの優先順位を再設定して試すことができます。試してみたら、私はコメントして、それがうまくいくなら答えを受け入れるでしょう。 –
あなたのフィードバックのための素晴らしい@JohnShelleyありがとう私はまたいくつかの最近の調査結果を更新しました!乾杯! –