Sinon: Метод заглушки в том же файле не работает

Созданный на 5 окт. 2016  ·  3Комментарии  ·  Источник: sinonjs/sinon

Я пытаюсь выполнить модульное тестирование функции в файле, в то время как заглушку другой функции в ЖЕ файле, но макет не применяется и вызывается реальный метод. Вот пример:

// file: 'foo.js'

export function a() {
   // .....
}

export function b() { 
   let stuff = a(); // call a
   // ...do stuff
}

И мой тест:

import * as actions from 'foo';

const aStub = sinon.stub(actions, 'a').returns('mocked return');
actions.b(); // b() is executed, which calls a() instead of the expected aStub()

Все 3 Комментарий

Подумайте, как это будет выглядеть в стандартном ES5. Каждая функция экспортируется с определенным именем в объекте экспорта, но на нее также можно ссылаться изнутри с помощью имени функции. Речь идет о двух разных ссылках. При заглушке вы меняете внешнюю ссылку. Внутренняя ссылка остается прежней. Вы не можете изменить его, кроме случаев, когда вы создаете явный инжектор зависимостей (например, функцию установки для внутреннего использования). Это не ошибка, а особенность JavaScript.

Есть ли обходной путь по этому поводу ??? Очень часто возникают проблемы такого рода при тестировании файла nodejs.

Это описано в нашей документации в разделе «Как сделать»:
http://sinonjs.org/how-to/link-seams-commonjs/

Была ли эта страница полезной?
0 / 5 - 0 рейтинги