【问题标题】:How to create test doubles with Sinon that prevents execution of the actual function如何使用 Sinon 创建测试替身以防止执行实际功能
【发布时间】:2013-07-22 18:47:07
【问题描述】:

我正在使用 Mocha 和 Sinon 进行 javascript unit 测试。我想测试在某些情况下是否调用了某个方法。

但是,到目前为止,我无法管理 only 来测试该方法是否被调用。为了更清楚,我想要一个假的方法来代替实际的方法,因为我不想模拟我的整个应用程序状态来使这个简单的测试通过。

这是我的实际测试代码:

it('calls the handleResults method when its model syncs', function () {
  var spy = sinon.stub( this.appview, 'handleResults' ); 
  this.appview.model.fetch();
  server.requests[0].respond( 200,
                   { "Content-Type": "application/json" },
                   JSON.stringify( [ { id: "casa", text: "Something" } ] )
  );
  spy.should.have.been.called;
});

真正的this.appview.handleResults 方法正在被调用,而我想调用一个假版本,除了检查它是否被调用之外什么都不做。

我做错了什么?

【问题讨论】:

  • handleResults 是直接在 appView 上的方法吗?
  • 能贴出调用handleResults的代码吗?您必须确保它通过在原始方法的位置分配存根的相同路径。

标签: javascript unit-testing mocha.js sinon


【解决方案1】:

文档很清楚,通过使用stub,原来的函数会被mock替换,不会被调用:

作为间谍,存根可以是匿名的,也可以包装现有函数。 当用存根包装现有函数时,原始函数 没有被调用。

var stub = sinon.stub(object, "method");

将 object.method 替换为 存根函数。调用可以恢复原来的功能 object.method.restore(); (or stub.restore();)。抛出异常 如果该属性还不是一个函数,以帮助避免输入错误 存根方法。

【讨论】:

    猜你喜欢
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多