无法在测试中重现身份验证流程

问题描述 投票:0回答:0

我正在尝试遵循 urql 文档的身份验证指南。 让我们从最小的上下文开始:我有一个 React 应用程序和一个 graphql 服务器。我们正在引入刷新令牌功能,我正在 Web 客户端上实现刷新令牌流。为此,我修改了客户端配置以具有

authExchange
,它返回一组将用于处理特定身份验证操作的函数,例如:
didAuthError
addAuthToOperation
async refreshAuth
.

我的理解是

didAuthError
有判断服务器返回的错误是否应该触发
refreshAuth
的逻辑。到现在为止,当我在浏览器上尝试应用程序时,我已经成功地实现了这一点,只要服务器返回 401 错误消息:
token has expired
在`refreshAuth 中实现的刷新令牌突变被调用并且新的令牌对用于重试之前的请求,一切正常。综上所述,我面临的问题是我无法在我正在编写的测试中重现这个(urql docs about testing)。

const TestComponent = () => {
  const [res, execute] = useQuery({ query: 'query{ user {name }}' })
  return <div></div>
}    
it('refreshToken', async () => {
        clientConfig.executeQuery = jest.fn()
          .mockReturnValueOnce(
            fromValue({
              error: new CombinedError({
                networkError: new Error('token has expired'),
              }),
            }),
          )
          .mockReturnValueOnce(fromValue({
            data: { user: { name: 'user name' } }
          }))
    
        const wrapper = renderer.create(
          <Provider value={clientConfig}>
            <TestComponent />
          </Provider>)
    
        expect(clientConfig.executeQuery).toHaveBeenCalledTimes(2);
      });

    expect(jest.fn()).toHaveBeenCalledTimes(expected)

    Expected number of calls: 2
    Received number of calls: 1

我通过添加一些日志注意到的一件事是

didAuthError
返回的
authExchange
没有在测试中执行。

reactjs authentication graph refresh-token urql
© www.soinside.com 2019 - 2024. All rights reserved.