You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

测试NavBar组件登出按钮时遇[Function clear]非间谍函数错误求助

解决[Function clear] is not a spy or a call to a spy!报错问题

你遇到的错误是因为没有将localStorage.clear包装成vitest的spy函数,直接断言它的调用情况时,vitest无法识别这个原生方法的调用记录。

修复步骤:

  • 在测试用例中,先通过vi.spyOn监听localStorage.clear方法,将其转为可追踪的spy
  • 测试完成后建议恢复原方法,避免影响其他测试用例
  • 断言时使用创建的spy对象,而非原生的localStorage.clear

修改后的完整测试代码:

import React from "react";
import { render, fireEvent } from "@testing-library/react";
import NavBar from "../components/NavBar";
import { vi, test, describe, expect } from "vitest";

describe("NavBar component", () => {
  test("render the navBar correctly", () => {
    const setTokenMock = vi.fn();
    render(<NavBar setToken={setTokenMock} />);
  });

  test("Log out if log out button is clicked", () => {
    const setTokenMock = vi.fn();
    // 创建localStorage.clear的spy
    const clearSpy = vi.spyOn(localStorage, 'clear');

    const { getByText } = render(<NavBar setToken={setTokenMock} />);

    fireEvent.click(getByText("Déconnexion"));

    expect(setTokenMock).toHaveBeenCalledWith("");
    // 使用spy对象断言调用情况
    expect(clearSpy).toHaveBeenCalled();

    // 恢复原方法(可选,推荐)
    clearSpy.mockRestore();
  });
});

内容的提问来源于stack exchange,提问作者fifietcie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 23:52:35