单元测试Apollo,突变模拟错误提示

时间:2019-02-03 23:02:06

标签: reactjs testing apollo

我正在尝试模拟单元测试的graphql突变。我使用的是MockedProvider,但收到错误消息:“ UnhandledPromiseRejectionWarning:错误:查询没有更多模拟的响应:突变LoginMutation”

我做了很多谷歌搜索,然后将所有内容复制粘贴到一个文件中,这样导入就不会有问题了

const LOGIN_MUTATION = gql`
    mutation LoginMutation($email: String!, $password: String!) {
    login(email: $email, password: $password) {
      token
      user {
        name
      }
    }
  }
`;

const mocks = [
  {
    request: {
      query: LOGIN_MUTATION,
      variables: { email: 'test@test.com', password: 'password' },
    },
    result: {
      data: {
        login: {
          token: 'fakeToken',
          user: {
            name: 'Testy McTestface'
          }
        }
      }
    }
  }
]

describe('LoginForm', () => {
  let wrapper;
  let store;

  beforeEach(() => {
    store = mockStore(initialState);
  });

  it('triggers the doLogin action creator after the graphql call', () => {
    const mockDoLogin = jest.fn()
    let mockedWrapper = mount(
      <MockedProvider mocks={mocks} addTypename={false}>
        <Provider store={store}>
          <LoginForm doLogin={mockDoLogin} />
        </Provider>
      </MockedProvider>,
    );
    mockedWrapper.find('#loginButton').simulate('click')
    expect(mockDoLogin).toHaveBeenCalledTimes(1)
  })
});

我希望该测试通过(包装器上搜索的标签是正确的),但是我遇到了上述错误,所以我假设问题出在我的模拟游戏上,但对我来说看起来不错?

对不起,如果这很荒谬,但我已经盯着它看了几个小时。

1 个答案:

答案 0 :(得分:1)

您想给easygraphql-tester开枪吗?它会为您模拟查询,但是,如果您想设置一些灯具,也可以设置它们!

您可以通过模式以使用它!

import EasyGraphQLTester from 'easygraphql-tester'

const tester = new EasyGraphQLTester(schema)

const LOGIN_MUTATION = gql`
    mutation LoginMutation($email: String!, $password: String!) {
    login(email: $email, password: $password) {
      token
      user {
        name
      }
    }
  }
`;

const mocks = [
  {
    request: {
      query: LOGIN_MUTATION,
      variables: { email: 'test@test.com', password: 'password' },
    },
    result: tester.mock({
      query: LOGIN_MUTATION,
      variables: { email: 'test@test.com', password: 'password' }
    })
  }
]