testing是否在Nodejs中使用Jasmine解决或拒绝承诺

我知道如何在摩卡做到这一点,但想知道如何用茉莉花做到这一点。 我试过这个

describe('test promise with jasmine', function() { it('expects a rejected promise', function() { var promise = getRejectedPromise(); // return expect(promise).toBe('rejected'); return expect(promise.inspect().state).toBe('rejected'); }); }); 

然而,国家总是在pending ,当然,testing失败。 我找不到任何在线的例子,我可以使它工作。

有人可以帮我这个吗?

谢谢。

要用茉莉花testingasynchronous代码,你应该使用它的asynchronous语法 ,例如:

 describe('test promise with jasmine', function(done) { var promise = getRejectedPromise(); promise.then(function() { // Promise is resolved done(new Error('Promise should not be resolved')); }, function(reason) { // Promise is rejected // You could check rejection reason if you want to done(); // Success }); }); 

你可以使用finnaly块来testing诺言状态:

 it('should resolve if auth succeed', (done)=>{ var p = server.login('user', 'password'); p.finally(()=>{ expect(p.isFulfilled()).toBeTruthy(); done(); }); }); 

您可以使用isFulfilled来检查是否履行了承诺,并使用value方法来检查履行价值。 相应的拒收方法是拒绝reason

@列昂尼德的答案是正确的,但你可以这样简化,只使用承诺:

 it('test promise with jasmine', function() { return getRejectedPromise().then(function() { // Promise should not be resolved, so we reject it return Promise.reject(new Error('Promise should not be resolved')); }) .catch(function(err){ if(!/Promise should not be resolved/.test(err && err.message)){ return Promise.reject(err); } }) }) 

茉莉花2.7以上支持回复的承诺,并将完成其状态testing。

testing拒绝:

 it('test promise with jasmine', async () => { try { await getRejectedPromise(); } catch (err) { return; } throw new Error('Promise should not be resolved'); }); 

还是:

 it('test promise with jasmine', async () => { await getRejectedPromise() .then( () => Promise.reject(new Error('Promise should not be resolved')), () => {}); }); 

为了validation实际的消息 ,除了通常的instanceof/toBe() ,放置在catch

 expect(() => { throw err }).toThrow(new MyCustomError('Custom error message')); 

这种方法的好处是在testing输出上有一个更好的失败信息。

预期的函数抛出MyCustomError:自定义错误消息,但它抛出了另一个错误消息。

比平常的输出要好一些。

testing解决(不能更简单):

 it('test promise with jasmine', async () => { await getRejectedPromise(); });