Javascript 测试创建新实例的函数

Javascript 测试创建新实例的函数,javascript,object,dependency-injection,jasmine,mocking,Javascript,Object,Dependency Injection,Jasmine,Mocking,如果我创建了一个将状态存储在新实例中的函数,我如何模拟该实例构造函数,或者我是否需要这样做 function Game() { this.scoreArray = [] } Game.prototype.addScore = function(number) { score = new Score(number); this.scoreArray.push(score); }; function Score(number){ this.number = number } test.

如果我创建了一个将状态存储在新实例中的函数,我如何模拟该实例构造函数,或者我是否需要这样做

function Game() {
this.scoreArray = []
}

Game.prototype.addScore = function(number) {
  score = new Score(number);
  this.scoreArray.push(score);
};

function Score(number){
this.number = number
}
test.js

describe("#Game", function() {
  beforeEach(function() {
    game = new Game();

  describe("#addScore", function() {
    it("adds an instance of a score object into scoreArray", function() {
      game.addScore(5);
      game.addScore(2);
      var arrayLength = game.scoreArray.length;
      expect(arrayLength).toEqual(2);
    });
  });
});

还有,是否有更好的方法来测试它进入数组,比如查看实例的内容以验证它是什么?

我不会模拟
评分,因为它不是外部调用,也没有任何看起来需要模拟的行为。
Game
Score
现在只存储状态,这很容易测试

是的,您可以深入到
scoreArray
中,像这样测试它的成员

描述(#游戏),函数(){
beforeach(函数(){
游戏=新游戏();
});             
描述(#addScore),函数(){
它(“将分数对象的实例添加到scoreArray中”,函数(){
游戏。添加分数(5);
游戏。添加分数(2);
var arrayLength=game.scoreArray.length;
期望(排列长度)。toEqual(2);
expect(game.scoreArray[0].number).toEqual(5);
expect(game.scoreArray[1].number).toEqual(2);
});
});
});
函数游戏(){
this.scoreArray=[]
}
Game.prototype.addScore=函数(编号){
分数=新分数(编号);
this.scoreArray.push(score);
};
功能评分(编号){
这个数字=数字
}


谢谢!不过,仅供参考,如果要模拟这样调用的对象的实例,他们会怎么做?对于Jasmine,您将
spyOn
被模拟的函数,比如
spyOn(score,“functionToMock”)expect(score.functionToMock).tohavebeencall()