Javascript 如何解决与Sinon发生的争议?
当参数是延迟对象时,是否可以让sinon解析参数 考虑这一点:Javascript 如何解决与Sinon发生的争议?,javascript,promise,sinon,Javascript,Promise,Sinon,当参数是延迟对象时,是否可以让sinon解析参数 考虑这一点: function needToTest() { var isInitialized = q.defer(); var importantResult; var publicStuff; publicStuff.isInitialized = isInitialized.promise.then(function(res) { importantResult = res; }); var someCla
function needToTest() {
var isInitialized = q.defer();
var importantResult;
var publicStuff;
publicStuff.isInitialized = isInitialized.promise.then(function(res) {
importantResult = res;
});
var someClass = new SomeClass(isInitialized);
publicStuff.getResult = function() {
return importantResult;
};
return publicStuff;
}
我使用q作为promise库,但它并不重要。
SomeClass看起来像这样:
function SomeClass(promise) {
this.foo = function() {
//
};
//after some initializing:
var result = true; //or false
promise.resolve(result);
}
describe('test', function() {
var needToTestInstance;
beforeEach(function(done) {
new Squire()
.mock('someClassMock', someClassMock)
.require(['needToTest'], function(module) {
needToTest = module;
//Need to get the needToTest().isInitialized to resolve with a value!
done();
});
});
describe('importantResult', function() {
expect(needToTestInstance.getResult()).to.be(true);
});
});
也许这个模拟应该有某种功能来解决承诺,但这就是我目前所做的:
var someClassMock = sinon.stub().withArgs(q.defer());
someClass.prototype.foo = sinon.stub().returns('foo');
return someClassMock;
最后,我尝试使用sinon和Squire创建一个测试用例,如下所示:
function SomeClass(promise) {
this.foo = function() {
//
};
//after some initializing:
var result = true; //or false
promise.resolve(result);
}
describe('test', function() {
var needToTestInstance;
beforeEach(function(done) {
new Squire()
.mock('someClassMock', someClassMock)
.require(['needToTest'], function(module) {
needToTest = module;
//Need to get the needToTest().isInitialized to resolve with a value!
done();
});
});
describe('importantResult', function() {
expect(needToTestInstance.getResult()).to.be(true);
});
});
有可能在测试中的任何时候得到初始化以解决问题吗?你没有传递承诺,你传递的是一个延迟对象。你是对的,我需要稍微更新这个问题,但主要问题仍然是,我如何在测试用例中解决这个问题?你的
needToTest
非常令人困惑。什么是当前的以及当前的在哪里。是否使用初始的?为什么getResult
没有在任何地方使用,为什么使用importantResult
变量而不只是使用promise?您需要使用一个在第一个参数上调用.resolve()
的函数来模拟SomeClass
。这就像打回电话一样。然而,我通常建议,不要回绝承诺,也不要以收回/延期作为理由。您可能需要重新考虑您的总体设计-这也可能使SomeClass
和needToTest
更易于测试。如何使用一个函数模拟SomeClass,该函数使用第一个参数执行某些操作?我确实创建了someClassMock,但是在我的测试中调用someClassMock.returnsArg(0)时,注释行似乎没有返回承诺。可能是因为同一对象的不同初始化?