首页 > 解决方案 > 重构一个返回并执行副作用的函数

问题描述

我的测试中有一个辅助函数,如下所示:

function setupForTestingAPI(mockedManager) {
    const info = infoBuilder.createInfoObject();

    mockedManager.someFunc.returns(info); // side-effect of this function

    return info.userId; // return value
}

// Then I use it in tests like
function TestXXX() {
    let mockDbManager = getMockedManager();
    const userId = setupForTestingAPI();

    const service = new Service(mockDbManager);
    // do some assertions by calling a method
}

function TestYYY() {
    mockDbManager = getMockedManager();
    const userId = setupForTestingAPI();
    
    const service = new Service(mockDbManager);
    // do some assertions with a different method call
}

所以,我需要在我的测试中使用 userId 来执行方法调用。我很困惑是否适合setupForTestingAPI设置一些模拟并同时返回一些东西。但是,我不确定我应该如何重构我的代码。

一种方法是调用infoBuilder.createInfoObject()测试本身并将信息传递给setupForTestingAPI. 但是,这将导致测试功能重复。

有人可以帮我吗?

谢谢

标签: javascriptrefactoring

解决方案


推荐阅读