Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript单元测试依赖项-如何在依赖对象更改时使测试失败_Javascript_Unit Testing_Stubbing_Sinon - Fatal编程技术网

Javascript单元测试依赖项-如何在依赖对象更改时使测试失败

Javascript单元测试依赖项-如何在依赖对象更改时使测试失败,javascript,unit-testing,stubbing,sinon,Javascript,Unit Testing,Stubbing,Sinon,我有一个依赖于模型属性的控制器。 我编写了一个测试来测试这个控制器,并对模型进行了stubbed,当模型属性名称发生变化时,我如何使我的控制器测试失败 以下是一个例子: 型号: function Model(obj){ this.id = obj.id; this.name = obj.name; } 控制器: function Controller( model ){ this.model = model }; Controller.prototype.showName = f

我有一个依赖于模型属性的控制器。 我编写了一个测试来测试这个控制器,并对模型进行了stubbed,当模型属性名称发生变化时,我如何使我的控制器测试失败

以下是一个例子:

型号:

function Model(obj){
  this.id = obj.id; 
  this.name = obj.name;
}
控制器:

function Controller( model ){
  this.model = model
};
Controller.prototype.showName = function() { 
  return this.model.name; 
}
控制器测试:

describe("A controller", function(){

  var controller = new Controller( new Model({id:1, name: "john"}) );

  it ("should show the person name", function(){
    expect(controller.showName).toEqual("john");
  });

});
我希望每当“name”属性更改为其他属性(如“name2”)时,该测试失败

有人对如何在javascript中实现这一点提出了很好的建议吗

谢谢,
Shai

由于模型已公开,您可以检查属性的存在

expect(controller.name).toBeDefined();

另一方面,如果模型的属性被重命名,控制器也不会被更改,这个测试无论如何都会失败。

是的,我最终这样做了,但这并不完全是我的目标,因为我正在处理存根,我想要一些幕后机制来断言实际的属性存在,我可以把对象存根。好吧,你可以自己写匹配器<代码>返回对象hasOwnProperty(名称)或者你可以做一个for-in循环,从原型链中获取所有属性,并检查其中一个是否具有你要查找的名称。谢谢,根据Christian Johansen的说法,你可以使用Sandbox来实现,尽管我还没有使用它,但我会检查它。