gpt4 book ai didi

reactjs - react Jest mock useAuth0 无法解构未定义的属性 'isLoading'

转载 作者:行者123 更新时间:2023-12-05 06:00:59 29 4
gpt4 key购买 nike

我正在尝试从 @auth0/auth0-react 中模拟出 useAuth0 并遇到返回模拟值的问题。我目前有一个使用 useAuth0

的简单提供程序
import React, { createContext } from 'react';
import { useAuth0 } from "@auth0/auth0-react";

export const UserContext = createContext();

export const UserProvider = props => {
const {
isLoading
} = useAuth0();

return (
props.children
)
};

在我的测试中,此提供程序正在自定义 render 函数中使用

// test-utils.js
import React from 'react'
import { render as rtlRender } from '@testing-library/react'
import { createStore } from 'redux'
import { Provider } from 'react-redux'
import { MockedProvider } from '@apollo/client/testing';
// Import your own reducer
import applicationsReducer from "../app/slices/applications.slice";
import { UserProvider } from "../user-context";

function render(
ui,
{
initialState,
mock,
store = createStore(applicationsReducer, initialState),
...renderOptions
} = {}
) {
function Wrapper({ children }) {
return <Provider store={store}>
<MockedProvider mocks={mock} addTypename={false}>
<UserProvider>{children}</UserProvider>
</MockedProvider>
</Provider>
}
return rtlRender(ui, { wrapper: Wrapper, ...renderOptions })
}

// re-export everything
export * from '@testing-library/react'
// override render method
export { render }

为了模拟它,我使用来自 jest 的作用域模块文档设置了一个 mocks 文件夹

--src
--__mocks__
--@auth0
--auth0-react.js

该模拟的代码如下所示

export const withAuthenticationRequired = jest.fn().mockImplementation((component, _) => {
return component
})

export const useAuth0 = jest.fn().mockReturnValue({
error: null,
isAuthenticated: true,
isLoading: true,
user: {},
})

withAuthenticationRequired 模拟工作正常,但是 useAuth0 不断抛出错误错误:未捕获 [TypeError:无法解构 '(0 , _auth0React.useAuth0)(...)' 的属性 'isLoading',因为它未定义。]我已经为此苦苦挣扎了几个小时,我们将不胜感激。

最佳答案

最终解决了这个问题,我在测试实用程序中遗漏了 Auth0Provider:

// test-utils.js
import React from 'react'
import { render as rtlRender } from '@testing-library/react'
import { createStore } from 'redux'
import { Provider } from 'react-redux'
import { MockedProvider } from '@apollo/client/testing';
import { Auth0Provider } from "@auth0/auth0-react";

// Import your own reducer
import applicationsReducer from "../app/slices/applications.slice";
import { UserProvider } from "../user-context";

function render(
ui,
{
initialState,
mock,
store = createStore(applicationsReducer, initialState),
...renderOptions
} = {}
) {
function Wrapper({ children }) {
return <Auth0Provider clientId="__test_client_id__" domain="__test_domain__">
<Provider store={store}>
<MockedProvider mocks={mock} addTypename={false}>
<UserProvider>{children}</UserProvider>
</MockedProvider>
</Provider>
</Auth0Provider>
}
return rtlRender(ui, { wrapper: Wrapper, ...renderOptions })
}

// re-export everything
export * from '@testing-library/react'
// override render method
export { render }

关于reactjs - react Jest mock useAuth0 无法解构未定义的属性 'isLoading',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67388063/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com