【发布时间】:2016-01-06 15:09:02
【问题描述】:
我正在使用 Mocha 来测试其中包含异步方法的方法。我正在用 Sinon 消除这种依赖关系,并返回一个已解决的承诺。但是承诺永远不会被解决,或者至少在断言运行时它还没有解决。
这里是被测试的方法
function identify(traits) {
//THIS GETS CALLED SUCCESSFULLY
userService.get().then(function(user){
//CODE NEVER REACHES HERE
userService.set(user).then(function(){
//do something
}, function(){
//handle error
});
});
}
这是测试
it('should identify a valid email address', function(){
var user = { email: 'test@example.com' };
var getUserStub = sinon.stub(userService, "get");
var setUserStub = sinon.stub(userService, "set");
var userReturn = { email: 'test@example.com', urls: ['http://some.url.com'] };
getUserStub.returns(Promise.resolve(userReturn));
//THE METHOD UNDER TEST
identifyController.identify(user);
sinon.assert.calledOnce(userService.get); //WORKS FINE
sinon.assert.calledOnce(userService.set); //FAILS
getUserStub.restore();
});
userService.set 上的断言失败,它说它被调用了 0 次。我做错了什么?
【问题讨论】:
-
userService是全局变量吗? -
您可能在这里遇到了一些问题。 userService 是一个模块,但它在实时代码和测试文件中都是必需的。也许它们是不同的实例?
-
我们正在为我们的模块使用 browserify,所以我验证了两个文件中的 userService 是相同的。
标签: unit-testing promise mocha.js sinon chai