Chai 间谍不在浏览器上工作

Chai spies not working on Browser

我正在尝试在浏览器上使用 chai spies 和 mocha 运行,但有些东西不起作用。

使用此 html 配置:

<html>
<head>
  <meta charset="utf-8">
  <title>Mocha Tests</title>
  <link rel="stylesheet" href="./node_modules/mocha/mocha.css" />
</head>
<body>
  <div id="mocha"></div>
  <script src="./node_modules/mocha/mocha.js"></script>
  <script src="./node_modules/chai/chai.js"></script>
  <script src="./node_modules/chai-spies/chai-spies.js"></script>

  <script>
    mocha.setup('bdd')
    mocha.reporter('html');
    var expect = chai.expect;
  </script>

  <script src="./test.js"></script>

  <script>
    if (navigator.userAgent.indexOf('PhantomJS') < 0) {
      mocha.run();
    }
  </script>
</body>
</html>

以及这个测试文件:

describe("test spies", function () {
    it("are worning", function () {
        function myFunction () {
          console.log("Hello");
        }
        var spy = chai.spy(myFunction);
        expect(spy).to.be.spy;
        myFunction();
        expect(spy).to.have.been.called();
    });
});

我收到以下断言错误:

AssertionError: expected { Spy } to have been called
    at Context.<anonymous> (test/input-text-test-fixture.html:282:28)

谁能告诉我哪里做错了?

您需要调用间谍本身 - 而不是函数。

describe("test spies", function () {
it("are worning", function () {
    function myFunction () {
      console.log("Hello");
    }
    var spy = chai.spy(myFunction);
    expect(spy).to.be.spy;
    spy(); // Call the spy here
    expect(spy).to.have.been.called();
});

});

间谍包装函数并在内部调用它。通过仅调用函数本身,您 chai-spies 没有机会记录函数实际已被调用。