【发布时间】:2018-08-02 01:29:30
【问题描述】:
我们的MEANJS 应用程序有一个类(例如CompanyService),它加载另一个类的对象(例如CompanyRepo)并调用它的方法。我正在尝试为CompanyService 类编写单元测试,并且需要在CompanyRepo 方法中存根一个方法来模拟承诺拒绝。然而,尽管有存根,CompanyService 方法调用似乎调用了实际的CompanyRepo 方法调用。
代码流程如下,
companyService 方法
function isDomainExists(domain) {
return new Promise(function(resolve, reject) {
companyRepo.getCompanyByDomain(domain)
.then(function (company) {
return resolve(company);
}, function(rejected) {
return reject("Error");
})
} });
单元测试方法
var stub = sinon.stub(companyRepo,"getCompanyByDomain").rejects("error"); it('Should return company not registered if there is a DB error', function() {
return companyService.isDomainExists("test company").should.eventually.be.rejected(); }); stub.restore();
输出
公司服务 isDomainExists 方法 如果出现数据库错误,应返回未注册的公司: AssertionError: 预期的承诺被拒绝,但它被 { Object ($__, isNew, ...) }
我想我可以理解这里发生了什么。 companyService 类有一个 require 语句,它加载 companyRepo 类,该类甚至在存根发生之前就被执行。有什么方法可以避免这种情况发生吗?在这种情况下,推荐的最佳做法是什么?
【问题讨论】:
标签: javascript unit-testing tdd sinon sinon-chai