Chai间谍不在浏览器上工作

时间:2016-03-25 08:22:00

标签: javascript testing mocha chai

我试图在浏览器上使用mocha运行chai间谍,但有些东西不起作用。

使用此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)

有人可以告诉我我做错了什么吗?

1 个答案:

答案 0 :(得分:0)

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

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();
});

});

spy包装函数并在内部调用它。只需调用函数本身就可以让chai-spies无法记录实际调用的函数。