在Jest中测试回调

时间:2019-09-18 16:50:24

标签: javascript callback jestjs

我有一个继承的项目,在重构之前要编写大量测试,并且在测试回调时遇到了麻烦。

static createNew(data) {
        ApiActions.post(
            '/api/projects',
            data,
            (err, response) => {
    // this is the callback I want to test gets triggered
                if (!err) {
                    this.hideCreateNew();
                }
            }
    );
}

ApiActions只是构建并执行ajax请求,第三个参数是回调。

到目前为止我的测试:

import ApiActions from '@helpers/api';
jest.mock('@helpers/api');

...

it('should createNew', () => {
        const callback = jest.fn((cb) => cb());

        Actions.createNew({ data: [] }, callback);

        expect(ApiActions.post).toHaveBeenCalledWith(
            '/api/projects',
            { data: [] },
            expect.any(Function)
        );

        expect(callback).toHaveBeenCalled();
    });

1 个答案:

答案 0 :(得分:0)

您可以通过将createNew中的回调因素分解为一个单独的函数并将其用作默认回调,来重构代码,使其更具可测试性,但也可以传递其他回调。

我认为应该是这样的(可能有一点错误,但是应该可以说明这个想法):

static createCallback(err, response) {
    if (!err) {
        this.hideCreateNew();
    }
}

static createNew(data, callback) {
    // default to createCallback
    callback = callback || createCallback;

    ApiActions.post(
        '/api/projects',
        data,
        callback
    );
}

现在,您可以独立测试createNewcreateCallback的行为是否符合预期。

相关问题