Sinon: Os stubs devem ter um `resolves` e` rejes` para definir os resultados da promessa

Criado em 8 ago. 2015  ·  13Comentários  ·  Fonte: sinonjs/sinon

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!"));
Medium Feature Request Help wanted

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.

Todos 13 comentários

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

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

OscarF picture OscarF  ·  4Comentários

andys8 picture andys8  ·  4Comentários

akdor1154 picture akdor1154  ·  4Comentários

NathanHazout picture NathanHazout  ·  3Comentários

fearphage picture fearphage  ·  3Comentários