How Does One Stub Promise With Sinon?
Solution 1:
At current sinon version v2.3.1, you can use stub.resolves(value)
and stub.rejects(value)
function
For example, you can stub myClass.myFunction with following code
sinon.stub(myClass, 'myFunction').resolves('the value you want to return');
or
sinon.stub(myClass, 'myFunction').rejects('the error information you want to return');
Solution 2:
You just have to resolve the promise before you call the search function. This way your stub will return a resolved promise and then
will be called immediately. So instead of
var resolveStub = sinon.stub(deferred, "resolve");
you will resolve the deferred with your fake response data
deferred.resolve({insureds: results103})
Solution 3:
Also you can do something like this:
import sinon from'sinon';
const sandbox = sinon.sandbox.create();
constpromiseResolved = () => sandbox.stub().returns(Promise.resolve('resolved'));
constpromiseRejected = () => sandbox.stub().returns(Promise.reject('rejected'));
constx = (promise) => {
returnpromise()
.then((result) =>console.log('result', result))
.catch((error) =>console.log('error', error))
}
x(promiseResolved); // resolvedx(promiseRejected); // rejected
Solution 4:
I had a similar situation and the accepted answer and comments were not working, but along with this question they helped me solve this in the following way. I hope it is helpful for somebody.
varPromise = require('bluebird');
var deferred = Promise.defer();
stub = sinon.stub(deferred, 'resolve').returns(deferred.promise);
deferred.resolve({data: data});
// or
deferred.reject(newError('fake error'));
Solution 5:
There's one more alternative I found. Much pain free than other methods.
You can use this npm package: sinon-stub-promise.
It abstracts much of the details, so that you don't have to invent the wheel again. Helped my write my tests after struggling to simulate a promise for long.
Hope it helps!
Post a Comment for "How Does One Stub Promise With Sinon?"