Javascript 测试是否使用了函数。call()

Javascript 测试是否使用了函数。call(),javascript,jasmine,Javascript,Jasmine,我正在尝试编写一个测试,检查构造函数是否对另一个函数使用了.call()函数。以下是一个例子: 要测试的代码: function Mammal(name, color) { this.name = name; this.color = color; }; Mammal.prototype.beep = function() { return "Arf, Arf" }; Mammal.prototype.changeColor = function() { this.color =

我正在尝试编写一个测试,检查构造函数是否对另一个函数使用了.call()函数。以下是一个例子:

要测试的代码:

function Mammal(name, color) {
  this.name = name;
  this.color = color;
};
Mammal.prototype.beep = function() {
  return "Arf, Arf"
};
Mammal.prototype.changeColor = function() {
  this.color = "brown"
};

// TEST IF MAMMAL.CALL WAS USED IN THE DOG CONSTRUCTOR
function Dog(name, color){
  Mammal.call(this,name, color);
} 
当前测试(无法正常工作:

describe("Dog Class", function(){

  beforeEach(function(){
    dog = new Dog("Stewie", "Red");
  });

  it("should have a Name and Mammal color in its constructor", function(){      
    expect(dog.color).toEqual("Red");
    expect(truck.name).toEqual("Stewie");
  });

  it("should be called with the Mammal Constructor", function(){
    var test = spyOn(window, "Mammal").andCallThrough();
    expect(test.wasCalled).toEqual(true);
  });
});
我提到过这篇文章和类似的文章,但其中许多文章都提供了使用对象文本的方法调用设置测试的示例。“.call”将是函数对象的函数


我当前的测试不会将wasCalled属性更改为“true”,即使Dog构造函数中正在调用哺乳动物.call()。我如何设置测试以检查Dog构造函数中是否使用了哺乳动物.call()?

您想从何处区分它?Dog()的内部,通过查看代码,这是非常明显的……不要测试它正在调用哺乳动物构造函数,而是要确保它公开了正确的成员——还要确保设置原型,否则你将得不到任何方法。至于测试,如果你真的需要,你可以重写哺乳动物的.call方法。@BenjaminGruenbaum:修改后的哺乳动物.call会吗捕获诸如Function.call.call(哺乳动物,这个)之类的东西,或者检查哺乳动物()的内部会更可靠吗?@dandavis不,不会-但我还是不相信从这个用例开始。