【问题标题】:Javascript Unit testing dependencies - How to make a test fail when a depended object changesJavascript单元测试依赖项-当依赖对象更改时如何使测试失败
【发布时间】:2012-07-15 05:11:21
【问题描述】:

我有一个依赖于模型属性的控制器。 我写了一个测试来测试这个控制器并存根模型,我怎样才能让我的控制器测试在模型属性名称更改时失败?

这是一个例子:

型号:

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 中执行此操作有很好的建议吗?

谢谢, 谢

【问题讨论】:

    标签: javascript unit-testing stubbing sinon


    【解决方案1】:

    由于模型已公开,您可以检查该属性是否存在。

    expect(controller.name).toBeDefined();
    

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

    【讨论】:

    • 是的,我最终做到了,但这并不是我的目标,因为我正在使用存根,我想要一些幕后机制来断言实际属性存在,我可以存根对象。
    • 好吧,你可以编写自己的匹配器。 return obj.hasOwnProperty(name); 或者您可以执行 for in 循环以从原型链中获取所有属性并检查其中是否具有您要查找的名称。
    • 谢谢,根据 Christian Johansen 的说法,您实际上可以使用 Sandbox 来做到这一点,虽然我还没有使用它,但我会检查一下。
    猜你喜欢
    • 1970-01-01
    • 2022-06-29
    • 2014-05-29
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多