Este é um açúcar de sintaxe muito simples:
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!"));
Isso seria um bom açúcar, obrigado pela sugestão @mariusGundersen
Nossa equipe tem uma pequena biblioteca sobre npm que tem nos ajudado com esse tipo de coisa - https://github.com/substantial/sinon-stub-promise - embora a forma como está implementado atualmente exija uma sintaxe de stub como: sinon.stub().returnsPromise()
. Pensamentos? Parece que a partir do exemplo acima isso pressupõe uma avaliação síncrona, certo?
Gosto muito da sugestão de @mariusGundersen . Pelo que eu sei, todas as bibliotecas de promessas são assíncronas o tempo todo, certo? Em caso afirmativo, acho que a promessa stub deve espelhar esse comportamento.
Eu apenas imaginei que ele usaria o Promise.resolve
disponível globalmente, se houver, e se não, não funcionaria. Mas deixá-lo retornar um objeto com um método then
é uma solução muito melhor:
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)});
(escrito no telefone, pode conter erros)
Nossa equipe escreveu uma pequena biblioteca para fornecer funcionalidade semelhante. Talvez isso ajude. Ele usa a biblioteca bluebird para promessas. https://www.npmjs.com/package/sinon-bluebird
+1 para suporte Promise nativo
Há também um projeto chamado sinon-as-prometeu que corrige módulo sinon existente de seu projeto usando nativo-promessa somente para adicionar Resolve / rejeita semântica para canhotos.
Seria ótimo se isso ou as mudanças de um dos outros módulos pudessem ser adicionadas ao próprio sinon.
Posso fazer um sinon.stub().returnsArg(1)
que o esboço retorna uma promessa? Estou tentando apenas retornar o argumento como a resolução de minha promessa. Não parece funcionar.
@jnystrom questões de uso pertencem à lista de discussão, mas isso não é algo que o sinon atualmente suporta como açúcar sintático. Talvez você possa sugerir uma sintaxe? Algo assim deve fazer o que você quiser, e você não precisa de sinon para isso.
stub = (arg) => Promise.resolve(arg);
O mesmo daqui: # 738
Olá a todos, em primeiro lugar, obrigado pelo excelente trabalho que vocês têm feito na Sinon.
Se você gostaria de implementar isso, também adoraria dar uma chance, diga-me e começarei a trabalhar em um RP para isso.
@lucasfcosta , obrigado por isso. Acho que @mroderick falou há muito tempo sobre apenas integrar sinon-as-promised
no Sinon, não é? Essa seria a solução mais fácil e não tenho objeções.
@lucasfcosta Eu adoraria ver um PR para integrar sinon-as-promised
na filial master
da Sinon
Comentários muito úteis
Posso fazer um
sinon.stub().returnsArg(1)
que o esboço retorna uma promessa? Estou tentando apenas retornar o argumento como a resolução de minha promessa. Não parece funcionar.