使用document.location测试功能

时间:2015-11-11 10:50:15

标签: unit-testing reactjs mocha sinon redux

我需要帮助测试使用document.location的操作。 我正在运行react / redux + sinon / mocha。 这是我的行动:

export function importFile(file) {
    return (dispatch) => {
        dispatch(importFile());

        return jQuery.post('/api/import/', {file}).done((data) => {
            window.location = `/edit/${data.id}`;
        }).fail((err) => {
            return dispatch(importFileError(err));
        });
    };
}

如果你在命令行中运行我的测试 - 我无法检查done之后是否有重定向页面,但是如果我在浏览器中运行我的测试,我有重定向,所有其他测试都被删除。 这是我的测试:

it('should create an action to upload import file', (done) => {
            const id = '123';
            const file = 'testname';
            const server = sinon.fakeServer.create();
            const expectedActions = [
                {type: actions.IMPORT_FILE}
            ];
            const store = mockStore({}, expectedActions, done);
            store.dispatch(actions.importFileUpload(file));
            server.respondWith([201, { 'Content-Type':'application/json' }, `{"id":"${id}","version":12}`]);
            window.XMLHttpRequest = sinon.useFakeXMLHttpRequest();
            server.respond();
        });

测试这样的功能的最佳方法是什么?防止重定向或使用包装器进行重定向功能? 感谢。

1 个答案:

答案 0 :(得分:0)

我有一个相当复杂的代码我用Mocha测试,为了将它与Mocha隔离,我在iframe中运行它。这可以防止我的应用程序弄乱Mocha测试。它也应该用于防止window.location的分配停止测试,因为window.location是帧的本地。 (框架中的Window对象是与包含框架的页面中的对象不同的对象。)