gpt4 book ai didi

javascript - react : How to mock Auth0 for testing with Jest

转载 作者:行者123 更新时间:2023-12-03 07:05:11 27 4
gpt4 key购买 nike

我正在使用 React(react-create-app 和 TypeScript)。使用 Auth0 进行登录。

我想用 Jest 编写测试,我发现这个资源基本上是唯一一个关于模拟 Auth0 对象的东西。

所以我的代码如下所示:

import React from "react";
import ReactDOM from "react-dom";
import TopBar from "./index";
import {
useAuth0
} from "react-auth0-spa";

const user = {
email: "johndoe@me.com",
email_verified: true,
sub: "google-oauth2|12345678901234"
};

// intercept the useAuth0 function and mock it
jest.mock("react-auth0-spa");

describe("First test", () => {
beforeEach(() => {
// Mock the Auth0 hook and make it return a logged in state
useAuth0.mockReturnValue({
isAuthenticated: true,
user,
logout: jest.fn(),
loginWithRedirect: jest.fn()
});
});

it("renders without crashing", () => {
const div = document.createElement("div");
ReactDOM.render( < TopBar / > , div);
});
});


但我最终陷入了这个错误:
Property 'mockReturnValue' does not exist on type '() => IAuth0Context | undefined'.ts(2339)
我在这里有点迷路,任何帮助将不胜感激!

最佳答案

我自己花了一个小时左右才弄清楚这一点。问题源于修改模拟返回值后应用于 useAuth0 的类型不正确。我的解决方案是使用来自“ts-jest/utils”的模拟。您也可以将 Angular 色、范围等添加到用户对象。 (参见 adminUser 对象)

import { render, screen } from "@testing-library/react";
import { useAuth0 } from "@auth0/auth0-react";
import { mocked } from "ts-jest/utils";

const user = {
email: "johndoe@me.com",
email_verified: true,
sub: "google-oauth2|12345678901234",
};

const adminUser = {
email: "johndoe@me.com",
email_verified: true,
sub: "google-oauth2|12345678901234",
"https://<<API_URL>>/roles": ["admin", "superuser"],
};


jest.mock("@auth0/auth0-react");

const mockedUseAuth0 = mocked(useAuth0, true);

describe("TopNav Component Tests - Logged in", () => {
beforeEach(() => {
mockedUseAuth0.mockReturnValue({
isAuthenticated: true,
user,
logout: jest.fn(),
loginWithRedirect: jest.fn(),
getAccessTokenWithPopup: jest.fn(),
getAccessTokenSilently: jest.fn(),
getIdTokenClaims: jest.fn(),
loginWithPopup: jest.fn(),
isLoading: false,
});
});
test("Logout Button displays when logged in", () => {
render(
<TopNav />
);
const loginButton = screen.getByText(/Logout/i);
expect(loginButton).toBeInTheDocument();
});
test("Make sure Admin Panel Button doesnt show without Role", () => {
render(
<TopNav />
);
const adminPanelButton = screen.queryByText(/Admin Panel/i);
expect(adminPanelButton).toBeNull();
});
});

describe("TopNav Component Tests - Admin User", () => {
beforeEach(() => {
mockedUseAuth0.mockReturnValue({
isAuthenticated: true,
user: adminUser,
logout: jest.fn(),
loginWithRedirect: jest.fn(),
getAccessTokenWithPopup: jest.fn(),
getAccessTokenSilently: jest.fn(),
getIdTokenClaims: jest.fn(),
loginWithPopup: jest.fn(),
isLoading: false,
});
});
test("Admin Panel Button displays", () => {
render(
<TopNav />
);
const adminPanelButton = screen.getByText(/Admin Panel/i);
expect(adminPanelButton).toBeInTheDocument();
});
});

关于javascript - react : How to mock Auth0 for testing with Jest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60010211/

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