Это очень простой синтаксический сахар:
var stub = sinon.stub();
stub.resolves("hello");
//is the same as
stub.returns(Promise.resolve("hello"));
stub.rejects(new Error("oh noes!"));
//is the same as
stub.returns(Promise.reject(new Error("oh noes!"));
Было бы неплохо, спасибо за предложение @mariusGundersen
У нашей команды есть небольшая библиотека на npm, которая помогает нам с подобными вещами - https://github.com/substantial/sinon-stub-promise - хотя то, как это реализовано в настоящее время, требует синтаксиса заглушки, например: sinon.stub().returnsPromise()
. Мысли? Из приведенного выше примера похоже, что это предполагает синхронную оценку, не так ли?
Мне очень нравится предложение @mariusGundersen . Насколько я знаю, все библиотеки обещаний всегда асинхронны, верно? Если это так, я думаю, что обещание-заглушка должно отражать это поведение.
Я просто подумал, что он будет использовать глобально доступный Promise.resolve
, если он существует, а если нет, это не сработает. Но позволить ему вернуть объект с помощью метода then
- гораздо лучшее решение:
var stub = sinon.stub();
stub.resolves("hello");
//is the same as
stub.returns({then: x => setTimeout(() => x("hello"), 0)});
stub.rejects(new Error("oh noes!"));
//is the same as
stub.returns({then: x => undefined, catch: x => setTimeout(() => x(new Error("oh noes!")), 0)});
(написано на телефоне, могут быть ошибки)
Наша команда написала небольшую библиотеку для обеспечения аналогичной функциональности. Может это поможет. Для обещаний он использует библиотеку bluebird. https://www.npmjs.com/package/sinon-bluebird
+1 за встроенную поддержку Promise
Также есть проект под названием sinon-as-обещанный, который исправляет существующий модуль sinon вашего проекта с использованием native- prom
Было бы здорово, если бы этот или изменения из одного из других модулей могли быть добавлены в сам sinon.
Могу ли я сделать sinon.stub().returnsArg(1)
когда заглушка возвращает обещание? Я пытаюсь просто вернуть аргумент как решение моего обещания. Похоже, не работает.
Вопросы об использовании
stub = (arg) => Promise.resolve(arg);
То же отсюда: # 738
Всем привет, прежде всего, спасибо за отличную работу, которую вы, ребята, проделали над Sinon.
Если вы хотите, чтобы это было реализовано, я также хотел бы попробовать, просто дайте мне знать, и я начну работать в PR для этого.
@lucasfcosta , спасибо за это. Я думаю, @mroderick давно говорил об интеграции sinon-as-promised
в Sinon, не так ли? Это было бы самым простым решением, и у меня нет возражений.
@lucasfcosta Я бы хотел увидеть PR для интеграции sinon-as-promised
в ветку master
Синон
Самый полезный комментарий
Могу ли я сделать
sinon.stub().returnsArg(1)
когда заглушка возвращает обещание? Я пытаюсь просто вернуть аргумент как решение моего обещания. Похоже, не работает.