【发布时间】:2021-02-16 12:49:41
【问题描述】:
我写了一个调用 apollo useQuery 的钩子。很简单:
使用决策者:
import { useState } from 'react';
import { useQuery, gql } from '@apollo/client';
export const GET_DECIDER = gql`
query GetDecider($name: [String]!) {
deciders(names: $name) {
decision
name
value
}
}
`;
export const useDecider = name => {
const [enabled, setEnabled] = useState(false);
useQuery(GET_DECIDER, {
variables: {
name
},
onCompleted: data => {
const decision = data?.deciders[0]?.decision;
setEnabled(decision);
},
onError: error => {
return error;
}
});
return {
enabled
};
};
我现在正在尝试测试它,MockedProvider 没有返回预期的数据:
import React from 'react';
import { render, screen } from '@testing-library/react';
import '@testing-library/jest-dom';
import { MockedProvider } from '@apollo/client/testing';
import { useDecider, GET_DECIDER } from './useDecider';
const getMock = (value = false, decider = '') => [
{
request: {
query: GET_DECIDER,
variables: {
name: decider
}
},
result: () => {
console.log('APOLLO RESULT');
return {
data: {
deciders: [
{
decision: value,
name: decider,
value: 10
}
]
}
};
}
}
];
const FakeComponent = ({ decider }) => {
const { enabled } = useDecider(decider);
return <div>{enabled ? 'isEnabled' : 'isDisabled'}</div>;
};
const WrappedComponent = ({ decider, value }) => (
<MockedProvider mocks={getMock(value, decider)} addTypename={false}>
<FakeComponent decider={decider} />
</MockedProvider>
);
describe('useDecider', () => {
it('when decider returns true', () => {
// should return true
render(<WrappedComponent decider="fake_decider" value={true} />);
screen.debug();
const result = screen.getByText('isEnabled');
expect(result).toBeInTheDocument();
});
});
【问题讨论】:
-
您能否提供有关
MockedProvider返回的内容的更多信息?或者也许是一个代码框? -
MockedProvider 是从@apollo 导出的:
import { MockedProvider } from '@apollo/client/testing';我正在尝试关注文档apollographql.com/docs/react/development-testing/testing -
我的意思是,
MockedProvider在您的测试中返回的数据是什么?你说数据不是预期的。 -
没什么,
data = undefined。我添加了console.log(loading, data) andloading = true`,但我从来没有看到它切换到false
标签: javascript reactjs apollo react-apollo apollo-client