背景
我有一个类,它有一个getter函数,返回一个使用构造函数初始化的子对象数组。在我的单元测试中,我想验证创建的子对象是否为类的实例,但出于某种原因,instanceOf
返回false
而不是true
。
守则
我的课程:
function Class(data) {
this.data = data
}
Class.prototype = {
get children() {
return _.each(this.data.children, function(child) {
return new Class(child);
});
}
}
我的测试:
it('should instantiate each child', function() {
var classInstance = new Class({
children: [
/* ... */
]
});
classInstance.children.forEach(function (child) {
expect(child).to.be.an.instanceOf(Class); //THIS FAILS
});
});
有趣的是,expect(classInstance).to.be.an.instanceOf(Class);
通过。这是什么原因?
答案 0 :(得分:4)
我认为你的测试失败了,因为它应该失败。我认为你的getter函数应该是这样的:
return _.map(this.data.children, function(child) {
return new Class(child);
});
即_.map()
而不是_.each()
,因为您要构建要返回的数组。当您使用return
时,_.each()
语句实际上什么都不做,_.each()
只返回原始数组。