Заглушки Sinon не восстановлены должным образом - PullRequest
1 голос
/ 06 ноября 2019

Я использую mocha, chai и sinon для тестирования моего кода для экспресс-узла.

У меня возникла странная проблема, которая выглядит так, будто sinon не может восстановить заглушки, поэтому в следующем тесте я получаю известную ошибку

Attempted to wrap <method1> which is already wrapped

Вот что я делаю

  • Я использую mocha-steps вместо it() для моих тестовых случаев, чтобы они выполнялись последовательно (я хотел убедиться, чтоэто не асинхронное состояние гонки)
    • Я использую тест sinon для автоматической очистки заглушек, на случай, если я что-то делаю не так

Вотконтрольный пример:

step('should do stuff', test(function () {

    const stub1 = sinon.stub(my_model1, 'method1');

    chai.request(server)
        .get('/endpoint')
        .send(body)
        .end(function (err, res) {
            stub1.restore();
            do_various_assertions(err, res);
        });
}));

и еще один

step('should do other stuff', test(function () {

        const stub1 = sinon.stub(my_model1, 'method1');

        chai.request(server)
            .get('/endpoint')
            .send(slightly_different_body)
            .end(function (err, res) {
                stub1.restore();
                do_various_assertions(err, res);
            });
    }));

, где я получаю ошибку выше

Attempted to wrap <method1> which is already wrapped

Если я закомментирую заглушку во втором случаеработает отлично. Но почему? Что я делаю не так?

1 Ответ

1 голос
/ 06 ноября 2019

Следующий шаг должен знать, что предыдущий шаг завершен, вам нужно вызвать функцию done. В вашем примере второй шаг не ждет первого и method1 не восстанавливается.

step('should do stuff', function (done) {

    const stub1 = sinon.stub(my_model1, 'method1');

    chai.request(server)
        .get('/endpoint')
        .send(body)
        .end(function (err, res) {
            stub1.restore();
            do_various_assertions(err, res);
            done();
        });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...