【发布时间】:2013-02-25 11:56:02
【问题描述】:
我开始编写一些 javascript 测试并试图找出检查模块构造函数的私有成员的最佳方法。例如,在下面的示例中,我使用显示模块模式将公共 api 公开给我的模块。我想在$.getJSON ajax 请求的回调过程中测试privateVar 是否正确设置。
第二个测试 it('should update privateVar', ...), 不起作用,因为 myModule.privateVar (故意)不在模块的公共 api 中。
所以,我的问题是,无需将 privateVar 作为公共 api 的一部分来测试这种行为的最佳方法是什么? ,或者也许是一种使用像 SinonJs 之类的东西来监视私人成员的方法?
define('myModule',
['jquery'],
function ($) {
var
myVar = "something",
privateVar = "something else",
doSomething = function() {
return $.getJSON('http://myapi.com/do-something', { requestData : "some data" }, function(response){
myVar = response.data.value1;
privateVar = response.data.value2;
});
};
return {
doSomething : doSomething,
myVar : myVar
};
}
);
define('test/test.myModule',
['myModule', 'chai', 'sinon', 'mocha'],
function (myModule, chai, sinon) {
describe("myModule", function() {
var expect = chai.expect;
describe('doSomething', function() {
var value1 = 'value1 value',
value2 = 'value2 value';
beforeEach(function() {
sinon.stub($, 'ajax').yieldsTo('success', {
data : { value1 : value1, value2 : value2 }
});
});
afterEach(function() {
$.ajax.restore();
});
it('should update myVar', function(done) {
myModule.doSomething();
expect(myModule.myVar).to.equal(value1);
done();
});
it('should update privateVar', function(done) {
myModule.doSomething();
expect(myModule.privateVar).to.equal(value2);
done();
});
});
});
}
);
【问题讨论】:
-
这应该对测试私人成员的主题有所了解:stackoverflow.com/questions/105007/…
-
@AdityaManohar 感谢您的链接。就我而言,我实际上是在测试一个公共方法,但我想确保它正确设置了一个非公共属性。
标签: javascript testing mocha.js sinon