Javascript Jest:尝试在Jest中模拟嵌套函数和重定向,但没有效果

Javascript Jest:尝试在Jest中模拟嵌套函数和重定向,但没有效果,javascript,reactjs,jestjs,Javascript,Reactjs,Jestjs,我们正在使用javascript框架(而不是react)来呈现ui。 main.js main.js与另一个js文件一起呈现导航栏和下拉列表。我的目的是检查导航栏中的标题下拉列表是否已呈现。我也 我正在测试浏览器重定向是否以正确的方式进行 action方法获取事件对象,并根据其类型执行注销(“用户:注销”)或重定向到应用程序页(“用户:应用程序”) 测试/main.js import main from '../main'; describe("some title", () => {

我们正在使用javascript框架(而不是react)来呈现ui。 main.js

main.js与另一个js文件一起呈现导航栏和下拉列表。我的目的是检查导航栏中的标题下拉列表是否已呈现。我也 我正在测试浏览器重定向是否以正确的方式进行

action方法获取事件对象,并根据其类型执行注销(“用户:注销”)或重定向到应用程序页(“用户:应用程序”)

测试/main.js

import main from '../main';
describe("some title", () => {
    it("some behavior", () => {
        let event = {
            target: 'user:logout'
        }
        let app = {
            context: ''
        }
        let appName = 'Some app';
        main.logout = jest.fn();

        someObj = jest.fn();
        someObj.lock = jest.fn();

        document.location.assign = jest.fn();
        main.action(event);

        expect(main.logout).toHaveBeenCalled();
        expect(document.location.assign).toBeCalledWith(app.context + `/${appName}/signout.action?name=${appName}`);
    })
});
在测试文件中,我试图模拟注销函数。但是,它正在执行someObj.lock函数。someObj不可用于测试/main.js 我也在嘲笑它。我不确定我是否必须改用spyOn。我正在使用document.location.assign测试浏览器重定向。 此测试不起作用,终端显示TypeError:无法将“/应用程序名称/注销。操作?名称=应用程序名称”解析为URL

我花了一整天的时间测试这个功能,但是没有结果。我需要一些关于测试此功能的最佳方法的建议

浏览的链接:


jest文档

有人能帮我吗?我已经花了很多时间阅读文档,所以阅读了很多文章,但是我没有取得任何进展。如果您创建一个JSFIDLE演示来重现这个问题,这会有所帮助。
import main from '../main';
describe("some title", () => {
    it("some behavior", () => {
        let event = {
            target: 'user:logout'
        }
        let app = {
            context: ''
        }
        let appName = 'Some app';
        main.logout = jest.fn();

        someObj = jest.fn();
        someObj.lock = jest.fn();

        document.location.assign = jest.fn();
        main.action(event);

        expect(main.logout).toHaveBeenCalled();
        expect(document.location.assign).toBeCalledWith(app.context + `/${appName}/signout.action?name=${appName}`);
    })
});