【问题标题】:Assert dependency has been called with Sinon使用 Sinon 调用了断言依赖项
【发布时间】:2021-09-12 18:01:09
【问题描述】:

我正在尝试断言是否调用了依赖项。

我的代码示例是

export default class vehicle {
private builder: CarBuilder;

constructor() {
  this.builder = CreateCar(); <- factory return fake data
}

createBmw(model) {
  return this.builder.validate(model); <- test this line has been called
}

我的测试是这样的:

it("createBmw method should make call to validate", () => {
  //not sure if this the correct way?
  const carBuilder = new carBuilder();
  const builder = sinon.stub(carBuilder, "validate");

  const sut = new vehicle();
  sut.createBmw("5 series");

  expect(builder).to.be.called;
});

【问题讨论】:

  • 你是如何导入CreateCar工厂函数的?
  • 在我的主课中,我从“../builders/carBuilder”导入了 { CreateCar }

标签: typescript mocha.js chai sinon


【解决方案1】:

Sinon 不能存根独立函数。 CreateCar 工厂函数适用于您的案例。所以,你应该使用Link Seams 来做到这一点。我们需要proxyquire 来构建我们的接缝。

例如

vehicle.ts:

import { CarBuilder, CreateCar } from './builders/carBuilder';

export default class Vehicle {
  private builder: CarBuilder;

  constructor() {
    this.builder = CreateCar();
  }

  createBmw(model) {
    return this.builder.validate(model);
  }
}

builders/carBuilder.ts:

export interface CarBuilder {
  validate(model): void;
}

export function CreateCar(): CarBuilder {
  return { validate(model) {} };
}

vehicle.test.ts:

import proxyquire from 'proxyquire';
import sinon from 'sinon';

describe('68197110', () => {
  it('should pass', () => {
    const carStub = { validate: sinon.stub() };
    const CreateCarStub = sinon.stub().returns(carStub);
    const Vehicle = proxyquire('./vehicle', {
      './builders/carBuilder': {
        CreateCar: CreateCarStub,
      },
    }).default;
    const sut = new Vehicle();
    sut.createBmw('5 series');
    sinon.assert.calledWithExactly(carStub.validate, '5 series');
  });
});

单元测试结果:

  68197110
    ✓ should pass (1481ms)


  1 passing (1s)

-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |   83.33 |      100 |      50 |   83.33 |                   
 68197110          |     100 |      100 |     100 |     100 |                   
  vehicle.ts       |     100 |      100 |     100 |     100 |                   
 68197110/builders |      50 |      100 |       0 |      50 |                   
  carBuilder.ts    |      50 |      100 |       0 |      50 | 6                 
-------------------|---------|----------|---------|---------|-------------------

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-30
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    • 2015-07-06
    • 2021-11-16
    • 1970-01-01
    相关资源
    最近更新 更多