为什么在我的单元测试中测试instanceOf会失败?

时间:2015-03-25 15:18:41

标签: javascript karma-jasmine

背景

我有一个类,它有一个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);通过。这是什么原因?

1 个答案:

答案 0 :(得分:4)

我认为你的测试失败了,因为它应该失败。我认为你的getter函数应该是这样的:

return _.map(this.data.children, function(child) {
  return new Class(child);
});

_.map()而不是_.each(),因为您要构建要返回的数组。当您使用return时,_.each()语句实际上什么都不做,_.each()只返回原始数组。