【问题标题】:Testing function with document.location使用 document.location 测试功能
【发布时间】:2016-02-12 10:50:52
【问题描述】:

我需要帮助来测试使用 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();
        });

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

【问题讨论】:

    标签: unit-testing reactjs mocha.js sinon redux


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-30
      • 1970-01-01
      • 2023-04-10
      • 2021-05-27
      • 1970-01-01
      • 1970-01-01
      • 2019-04-24
      • 2020-09-21
      相关资源
      最近更新 更多