2017-02-25 97 views
0

我想爲承諾拒絕案例做測試用例。使用摩卡測試承諾拒絕案例

這是我的代碼

1)文件:TemplateFinder.js

**I want to make test for this method on promise reject using *mocha* how can i achieve this?** 

var findTemplate = function (template) { 

    return templateFinder.find(templateName) 
     .then((result) => { 
      return result.id; 
     }); 
}; 

2)query.js

var find = function (template) { 
    return knex.where({ 
     internal_name: template, 
    }) 
    .select('external_id') 
    .from('mailing_external_template') 
    .then(function (data) { 
     if (0 === data.length) { 
      return Promise.reject(RangeError('no result for id')); 
     } else { 
      return data[0].external_id; 
     } 
    }); 
}; 

3)app.js

Main file to run 

function findTemplate() 
{ 
    templateFinder.findGoodTemplate('good-mail-template'); 
} 

initiateProcess() 
.then(function (fromResolve) { 
    return findTemplate(); 
}) 
.catch(function (e) { 

}); 

我的嘗試:

it('should throw error if template not found', function() { 

    var findTemplateIdStub = sinon.stub(templateFinder, 'find'); 

    var error = 'my expected error message returned by my function'; 
    findTemplateIdStub.returns(Promise.reject(error)); 

    return templateFinder.findTemplate(templateName) 
     .catch(function(err) { 
     assert.equal(err, error); 
     }); 
    }); 

我的嘗試的問題是findTemplate沒有捕獲,所以我怎麼能從我的測試用例斷言變量,而不是原來的。 (Catch不在代碼中,但仍然是我的測試通行證。)請幫我做一下findTemplate拒絕案例的測試用例。

回答

0

findTemplateIdStub應該返回一個承諾?

如果是這樣的話,你可以包括sinon-as-promised和存根應該是:

findTemplateIdStub.rejects('some error')爲不好的情況下

findTemplateIdStub.resolves(1234)了良好的情況下