Sinon: Stub harus memiliki `resolves` dan` rejects` untuk menyetel hasil promise

Dibuat pada 8 Agu 2015  ·  13Komentar  ·  Sumber: sinonjs/sinon

Ini gula sintaks yang sangat sederhana:

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

Komentar yang paling membantu

Dapatkah saya melakukan sinon.stub().returnsArg(1) mana rintisan mengembalikan janji? Saya mencoba untuk hanya membalas argumen sebagai ketetapan janji saya. Sepertinya tidak berhasil.

Semua 13 komentar

Itu akan menjadi gula yang bagus, terima kasih atas saran @mariusGundersen

Tim kami memiliki perpustakaan kecil di npm yang telah membantu kami dengan hal semacam ini - https://github.com/substantial/sinon-stub-promise - meskipun cara penerapannya saat ini memerlukan sintaks rintisan seperti: sinon.stub().returnsPromise() . Pikiran? Sepertinya dari contoh di atas ini mengasumsikan evaluasi sinkron, bukan?

Saya sangat menyukai saran @mariusGundersen . Sejauh yang saya tahu, semua pustaka janji selalu asinkron sepanjang waktu, bukan? Jika demikian, menurut saya janji rintisan harus mencerminkan perilaku ini.

Saya baru saja membayangkan itu akan menggunakan Promise.resolve tersedia secara global, jika ada, dan jika tidak itu tidak akan berhasil. Tetapi membiarkannya mengembalikan objek dengan metode then adalah solusi yang jauh lebih baik:

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)});

(tertulis di ponsel, mungkin ada kesalahan)

Tim kami menulis sedikit lib untuk menyediakan fungsi serupa. Mungkin ini akan membantu. Ini menggunakan perpustakaan bluebird untuk janji. https://www.npmjs.com/package/sinon-bluebird

1 untuk dukungan asli Promise

Ada juga proyek bernama sinon-as -promise yang menambal modul sinon proyek Anda yang sudah ada menggunakan native-promise-only untuk menambahkan semantik resolves / rejects ke stub.

Ini akan menjadi ace jika ini atau perubahan dari salah satu modul lain dapat ditambahkan ke sinon itu sendiri.

Dapatkah saya melakukan sinon.stub().returnsArg(1) mana rintisan mengembalikan janji? Saya mencoba untuk hanya membalas argumen sebagai ketetapan janji saya. Sepertinya tidak berhasil.

Pertanyaan penggunaan

stub = (arg) => Promise.resolve(arg);

Sama dari sini: # 738

Halo semuanya, pertama-tama, terima kasih atas pekerjaan luar biasa yang telah kalian lakukan di Sinon.
Jika Anda ingin menerapkannya, saya juga ingin mencobanya, beri tahu saya dan saya akan mulai bekerja di Humas untuk itu.

@lucasfcosta , terima kasih untuk itu. Saya pikir @mroderick sudah lama berbicara tentang hanya mengintegrasikan sinon-as-promised ke Sinon, bukan begitu? Itu akan menjadi solusi termudah, dan saya tidak keberatan.

@lucasfcosta Saya ingin sekali melihat PR untuk mengintegrasikan sinon-as-promised ke cabang Sinon master

Apakah halaman ini membantu?
0 / 5 - 0 peringkat