sinon模拟不接电话

时间:2017-06-16 13:53:45

标签: javascript unit-testing mocking sinon

我很难理解我做错了什么。

我有一个JS类:

export default class A {

  constructor(repository) {
    this._repository = repository;
  }

  async process(date) {
    // ...

    this._repository.writeToTable(entry);
  }
}

我试图编写一个使用sinon.mock

模拟存储库的测试

这是我到目前为止所做的:

describe('A', () => {
  describe('#process(date)', () => {
    it('should work', async () => {

      const repository = { writeToTable: () => {} };
      const mock = sinon.mock(repository);

      const a = new A(repository);

      await a.process('2017-06-16');

      mock.expects('writeToTable').once();
      mock.verify();
    });
  });
});

但总是说不出来

ExpectationError: Expected writeToTable([...]) once (never called)

我已经检查过(添加了一个console.log),它正在调用我在测试中定义的对象。

1 个答案:

答案 0 :(得分:1)

我在本地运行并阅读sinonjs.org上的文档,您似乎正在做正确的事。

我尝试使用spy重新编写您的示例,最后得到类似的内容以获得通过测试:

import sinon from "sinon";
import { expect } from "chai";

import A from "./index.js";

describe("A", () => {
  describe("#process(date)", () => {
    it("should work", async () => {
      const repository = { writeToTable: sinon.spy() };

      const a = new A(repository);

      await a.process("2017-06-16");

      expect(repository.writeToTable.calledOnce).to.be.true;
    });
  });
});