Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 开玩笑地测试回调_Javascript_Callback_Jestjs - Fatal编程技术网

Javascript 开玩笑地测试回调

Javascript 开玩笑地测试回调,javascript,callback,jestjs,Javascript,Callback,Jestjs,我继承了一个项目,在重构它之前,我正在编写一系列测试,在测试回调时遇到了麻烦 static createNew(data) { ApiActions.post( '/api/projects', data, (err, response) => { // this is the callback I want to test gets triggered if (

我继承了一个项目,在重构它之前,我正在编写一系列测试,在测试回调时遇到了麻烦

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请求,第三个参数是回调

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

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();
    });

通过将
createNew
中的回调分解为一个单独的函数,并将其用作默认回调,您可以重构代码,使其更易于测试,但也允许传入其他回调

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


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

您可以重构代码,将
createNew
中的回调分解为单独的函数,并将其用作默认回调,从而使代码更易于测试,但也允许传入其他回调

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


现在您可以独立地测试代码是否>代码> >代码> CealCeCalBue<代码>独立于行为是否符合预期。

我确实考虑过这一点,但是这种函数的样式出现了多次,所有回调都做了不同的事情,所以不容易有一个普通的。你可以强制通过一个考试。如果
ApiActions
请求代码足够大,可以对单个函数进行抽象,并需要回调来具体处理响应。它高度依赖于上下文,需要一定程度的品味。我并不是说我的解决方案是正确的,在你的情况下我不可能知道。我确实考虑过这个问题,但是这个函数的样式出现了多次,所有回调都做了不同的事情,所以不容易有一个普通的。我不认为有一个普通的回调是不必要的。你可以强制通过一个考试。如果
ApiActions
请求代码足够大,可以对单个函数进行抽象,并需要回调来具体处理响应。它高度依赖于上下文,需要一定程度的品味。我不是说我的解决方案是正确的,我不可能知道你的情况。