Jest:试图模仿嵌套函数并重新定向,但无济于事

时间:2017-11-06 03:58:27

标签: javascript reactjs jestjs

我们使用javascript框架(没有反应)来渲染ui。 main.js

function logout(){
    someObj.lock($('#container'), 'Logging out', true);
    document.location = app.context + `/${appName}/signout.action?name=${appName}`;
}

function action(event){
    switch(event.target){
        case 'user:logout':
            logout();
            break;
        case 'user:application':
            document.location = app.context + "/";
            break;
    }
}

module.exports = {
    action: action,
    logout: logout
}

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

action方法接受一个事件对象,并根据其类型执行注销('user:logout')或重定向到应用程序页面('user:application')。

测试 /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:无法将“/ application name / signout.action?name = application name”解析为URL。

我花了一整天的时间来测试这个功能,但无济于事。我需要一些关于测试此功能的最佳方法的建议。

探索的链接:fiddle

jest documentation

0 个答案:

没有答案