Sinon не заглушается из-за нескольких тестовых случаев - PullRequest
0 голосов
/ 03 апреля 2019

GitHub Repo

Когда я запускаю свои тесты с использованием mocha, sinon устанавливает заглушки на основе первого вызываемого app.js.Глядя на других людей, сталкивающихся с такими же проблемами, похоже, что проблема в том, что когда я require('../../../app') загружает кешированную версию, поэтому он использует те же заглушки, что и те, которые были настроены при первом вызове.

То, что я пробовал в разделе beforeEach в обоих тестовых случаях:

  • decache('../../../app'); app = require('../../../app')
  • Использование Sinon Sandbox и восстановление этого
  • delete require.cache[require.resolve('../../../app')]; app = require('../../../app')
  • Использование насмешек для сброса кеша

Я не знаю, вызывает ли он кешированную версию требования или я не корректно его отключаю.

Заранее благодарим за любую помощь, которая может быть оказана.

1 Ответ

0 голосов
/ 03 апреля 2019

По умолчанию модули импортируются в поведении типа Singleton в узле, например

const app = require('./app');
app.someProperty = 'x';

Если я require приложение снова в другом файле после этого, то можно ожидать, что someProperty будет по-прежнему x, поскольку, как вы уже разработали, Node будет кэшировать результат и возвращать один и тот же каждый раз.

В вашем случае это меньше проблема с Node, а больше ваше использование Sinon - когда вы что-то делаете stub, обычной практикой является восстановление значения после завершения теста, например,

const app = require('...');

before(() => sinon.stub(app,'someFunction'));

after(() => app.someFunction.restore());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...