我们的MEANJS
应用程序有一个类 (Eg, CompanyService
),它加载CompanyRepo
另一个类的对象 (Eg, ) 并调用它的方法。我正在尝试为CompanyService
该类编写单元测试,并且需要在方法中存根一个方法CompanyRepo
来模拟承诺拒绝。然而,尽管有存根,CompanyService
方法调用似乎调用了实际的CompanyRepo
方法调用。
代码流程如下,
公司服务方式
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 类,该类甚至在存根发生之前就被执行。有什么方法可以避免这种情况发生吗?在这种情况下,推荐的最佳做法是什么?