admin管理员组

文章数量:1180551

I'm having problems writing tests in JavaScript with Sinon and Chai. I'm trying to check if a function is called on a spy and get I get

"Error: Invalid Chai property: calledOnce"

I'm doing the same thing in another project with the same test dependencies without any problem.

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"
}

I'm having problems writing tests in JavaScript with Sinon and Chai. I'm trying to check if a function is called on a spy and get I get

"Error: Invalid Chai property: calledOnce"

I'm doing the same thing in another project with the same test dependencies without any problem.

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"
}
Share Improve this question edited Oct 22, 2021 at 16:33 VLAZ 29k9 gold badges62 silver badges82 bronze badges asked Jul 25, 2017 at 22:07 user1716970user1716970 7651 gold badge8 silver badges19 bronze badges 3
  • 1 Are you sure? I think that It should be expect(udpSocketStub.send.calledOnce).to.be.true, correct me if I'm wrong. – Dawid Karabin Commented Jul 25, 2017 at 22:13
  • @hinok ricostacruz.com/cheatsheets/sinon-chai.html Looks like you don't need the to.be.true. – Elliott Beach Commented Jul 26, 2017 at 1:41
  • @Elliott sinon-chai, I missed that package, you're right. But still probably it should be expect(udpSocketStub.send).calledOnce; – Dawid Karabin Commented Jul 26, 2017 at 8:57
Add a comment  | 

1 Answer 1

Reset to default 36

You're just missing the sinon-chai package, that adds sinon-like assertions to chai.

npm install --save sinon-chai

Initialization:

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

In case you're wondering, using the stub or the original function both work:

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;

本文标签: javascriptInvalid Chai property when calling calledOnceStack Overflow