当前位置: 首页 > 面试题库 >

使用Sinon.js存根类方法

堵浩波
2023-03-14
问题内容

我正在尝试使用sinon.js存根方法,但是出现以下错误:

Uncaught TypeError: Attempted to wrap undefined property sample_pressure as function

这是我的代码:

Sensor = (function() {
  // A simple Sensor class

  // Constructor
  function Sensor(pressure) {
    this.pressure = pressure;
  }

  Sensor.prototype.sample_pressure = function() {
    return this.pressure;
  };

  return Sensor;

})();

// Doesn't work
var stub_sens = sinon.stub(Sensor, "sample_pressure").returns(0);

// Doesn't work
var stub_sens = sinon.stub(Sensor, "sample_pressure", function() {return 0});

// Never gets this far
console.log(stub_sens.sample_pressure());

这是上述代码的jsFiddle(http://jsfiddle.net/pebreo/wyg5f/5/),还有我提到的SO问题的jsFiddle(http://jsfiddle.net/pebreo/9mK5d/1/)。

我确保在ssfiddle甚至jQuery 1.9 的 外部资源 中都包含了sinon 。我究竟做错了什么?


问题答案:

您的代码正在尝试在一个函数上存根Sensor,但是您已在上定义了该函数Sensor.prototype

sinon.stub(Sensor, "sample_pressure", function() {return 0})

基本上与此相同:

Sensor["sample_pressure"] = function() {return 0};

但是足够聪明地看到它Sensor["sample_pressure"]不存在。

因此,您想要做的是这样的事情:

// Stub the prototype's function so that there is a spy on any new instance
// of Sensor that is created. Kind of overkill.
sinon.stub(Sensor.prototype, "sample_pressure").returns(0);

var sensor = new Sensor();
console.log(sensor.sample_pressure());

要么

// Stub the function on a single instance of 'Sensor'.
var sensor = new Sensor();
sinon.stub(sensor, "sample_pressure").returns(0);

console.log(sensor.sample_pressure());

要么

// Create a whole fake instance of 'Sensor' with none of the class's logic.
var sensor = sinon.createStubInstance(Sensor);
console.log(sensor.sample_pressure());


 类似资料:
  • 如果我有一个接受两个回调的函数的存根,当存根函数被调用时,我如何连接sinon.js来调用两个回调? 例如,这里有一个我想存根的函数,它接受两个函数作为参数: 我可以用sinon来称呼其中一个论点: 或者 但我似乎不能让两者都被召唤。如果我尝试: 或者 那么sinon只会调用第二个参数。如果我以另一个顺序连接它,那么sinon将调用第一个参数。然而,我希望两者都被一个接一个地称呼。

  • 问题内容: 这是我要做的: 为下面的main()调用的方法定义存根。每个存根应打印“ FIXME:完成methodName()”,后跟换行符,并应返回-1。 输出示例: 这是我的代码: 我以为我理解方法存根,但是我感觉自己犯了一个非常愚蠢而简单的错误?我只能编辑代码的公共static int methodName部分。 问题答案: 从这个意义上讲,方法存根是没有实质内容的方法,即它没有按照计划执行

  • 问题内容: 考虑以下代码: 编译器抱怨正在尝试对行为进行存根的行。关于如何使用存根方法返回带有有界通配符的类型的任何指针? 问题答案: 您也可以为此使用非类型安全方法doReturn, 正如在Mockito的Google组中讨论的那样。 尽管它比起来简单,但再次请注意,它不是类型安全的。如果您担心类型安全,那么米尔豪斯的答案是正确的。 额外细节 要明确的是,这是观察到的编译器错误, 我相信编译器已

  • 我使用web上的各种解决方案尝试了这个解决方案,但无法找到代码中的错误。我需要为静态方法调用存根,因为我需要它用于遗留代码。如何使用PowerMockito模拟静态方法?

  • 问题内容: 我最近已经问了几个有关jUnit和Mockito的问题,但我仍然很努力地把握住这个问题。这些教程都是针对非常简单的示例的,因此我正在努力扩大测试用例以适合我的课程。 我目前正在尝试为Webapp中我的一个代理中的方法编写一些测试用例。该方法与代理内部的其他两种方法交互以验证某些对象。我现在只想测试这种方法。 这是我尝试做的事情: 创建我的代理的Mockito对象,如下所示: 使用Moc

  • 我最近问了几个面向jUnit和Mockito的问题,但我仍然很难掌握其中的诀窍。这些教程都是针对非常简单的示例,所以我很难扩展我的测试用例来为我的类工作。 我目前正试图为我在WebApp中的一个代理中的一个方法编写一些测试用例。该方法与代理内部的几个其他方法交互,以验证某些对象。我现在只想测试一下这个方法。 使用Mockito设置存根(希望是正确的术语)。如下所示: 尝试执行我的方法,如下所示: