Problems with ava asynchronous tests when stubbing with sinon

家住魔仙堡 提交于 2019-12-06 01:31:27

问题


I have a couple of tests I'd like to run on the .then and .catch blocks of one of my dependencies.

import test from 'ava';
import sinon from 'sinon';

// Fake dependency code - this would be imported
const myDependency = {
    someMethod: () => {}
};

// Fake production code - this would be imported
function someCode() {
    return myDependency.someMethod()
        .then((response) => {
            return response;
        })
        .catch((error) => {
            throw error;
        });
}

// Test code

let sandbox;

test.beforeEach(() => {
    sandbox = sinon.sandbox.create();
});

test.afterEach.always(() => {
    sandbox.restore();
});

test('First async test', async (t) => {
    const fakeResponse = {};

    sandbox.stub(myDependency, 'someMethod')
        .returns(Promise.resolve(fakeResponse));

    const response = await someCode();

    t.is(response, fakeResponse);
});

test('Second async test', async (t) => {
    const fakeError = 'my fake error';

    sandbox.stub(myDependency, 'someMethod')
        .returns(Promise.reject(fakeError));

    const returnedError = await t.throws(someCode());

    t.is(returnedError, fakeError);
});

If you run either test alone, the test passes. But if you run these together, the setup for the test A runs, and then before it completes, the setup for test B runs and you get this error:

Second async test
   failed with "Attempted to wrap someMethod which is already wrapped"

Maybe I'm not understanding how I should be setting up my tests. Is there way to force Test A to complete before Test B starts running?


回答1:


AVA tests are run concurrently, which messes up your Sinon stubbing.

Instead, declare your tests to be run serially and it should work:

test.serial('First async test', ...);
test.serial('Second async test', ...);


来源:https://stackoverflow.com/questions/37900687/problems-with-ava-asynchronous-tests-when-stubbing-with-sinon

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!