【问题标题】:Invalid Chai property when calling calledOnce调用 calledOnce 时 Chai 属性无效
【发布时间】:2018-01-01 00:43:45
【问题描述】:

我在用 Sinon 和 Chai 编写 JavaScript 测试时遇到问题。 我正在尝试检查一个函数是否在间谍上被调用并得到我得到

“错误:无效的 Chai 属性:calledOnce”

我在另一个具有相同测试依赖项的项目中做同样的事情,没有任何问题。

var udpSocketStub = this.sandbox.spy(udpSocket, 'send');
expect(udpSocketStub).calledOnce; // SHOULD FAIL


"dependencies": {
  "body-parser": "~1.17.1",
  "bootstrap": "^4.0.0-alpha.6",
  "chai": "^4.1.0",
  "co-mocha": "^1.2.0",
  "cookie-parser": "~1.4.3",
  "debug": "~2.6.3",
  "express": "~4.15.2",
  "jquery": "^3.2.1",
  "mocha": "^3.4.2",
  "morgan": "~1.8.1",
  "node-compass": "0.2.3",
  "pug": "^2.0.0-rc.1",
  "serve-favicon": "~2.4.2",
  "sinon": "^2.3.8",
  "sinon-chai": "^2.12.0"
}

【问题讨论】:

  • 你确定吗?我认为应该是expect(udpSocketStub.send.calledOnce).to.be.true,如果我错了,请纠正我。
  • @hinok ricostacruz.com/cheatsheets/sinon-chai.html 看起来你不需要to.be.true
  • @Elliott sinon-chai,我错过了那个包裹,你说得对。但仍然可能应该是expect(udpSocketStub.send).calledOnce;

标签: javascript sinon sinon-chai


【解决方案1】:

您只是缺少 sinon-chai 包,它向 chai 添加了类似 sinon 的断言。

npm install --save sinon-chai

初始化:

var chai = require('chai');
var sinon = require('sinon');
chai.use(require('sinon-chai'));

如果您想知道,使用存根或原始函数都可以工作:

var expect = chai.expect;

var udpSocketStub = this.sandbox.spy(udpSocket, 'send');

// Make a call
updSocket.send({..});

// Both should pass
expect(udpSocketStub).calledOnce;
expect(udpSocket.send).calledOnce;

// Identical, but more readable
expect(udpSocketStub).to.have.been.calledOnce;
expect(udpSocket.send).to.have.been.calledOnce;

【讨论】:

  • 感谢您的回答,因为这解决了我的问题...如果您尝试使用 import而不是require?
  • 您可以尝试 import sinonChai from 'sinon-chai' 然后 chai.use(sinonChai) 但您使用的是 TypeScript,对吗?我不确定 sinon-chai 是否支持 typescript。
  • 如果您认为我解决了您的问题,请随时勾选绿色箭头以将问题标记为已回答;)
  • 你确实解决了我的问题,但不幸的是我不是 OP
猜你喜欢
  • 2019-01-30
  • 1970-01-01
  • 2019-07-01
  • 2022-08-19
  • 2019-08-28
  • 2018-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多