Проверьте аргументы заглушки sinon в TypeScript - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть модульный тест, который проверяет аргументы функции.

it('Should return product from DB', () => {
  stub(ProductModel, 'findById').returns({
    lean: stub().returns({ total: 12 }),
  });


  getProduct(product_id);

  expect((ProductModel.findById as any).firstCall.args[0]).to.equal('product_id');
});

Мой вопрос: есть ли другой лучший способ сделать это? Я должен всегда приводить к any, чтобы избежать ошибки. Я также пытался stubFunc.calledWith(args), но в результате я получаю только true / false вместо ожидаемых / фактических значений.

1 Ответ

1 голос
/ 03 февраля 2020

Вы можете использовать API подтверждений из sinon. Кроме того, возвращаемое значение метода sinon.stub() является заглушкой sinon. Таким образом, вы можете использовать это возвращаемое значение вместо ProductModel.findById. При этом вам не нужно вводить приведение к any явно.

Например:

index.ts:

import { ProductModel } from "./model";

function getProduct(id: string) {
  return ProductModel.findById(id).lean();
}

export { getProduct };

model.ts:

class ProductModel {
  public static findById(id: string): { lean: () => { total: number } } {
    return { lean: () => ({ total: 0 }) };
  }
}

export { ProductModel };

index.test.ts:

import { stub, assert } from "sinon";
import { getProduct } from "./";
import { ProductModel } from "./model";

describe("60034220", () => {
  it("should pass", () => {
    const product_id = "1";
    const leanStub = stub().returns({ total: 12 });
    const findByIdStub = stub(ProductModel, "findById").returns({
      lean: leanStub,
    });
    getProduct(product_id);
    assert.calledWithExactly(findByIdStub, product_id);
    assert.calledOnce(leanStub);
  });
});

Результаты модульных испытаний с отчетом о покрытии:

60034220
    ✓ should pass


  1 passing (28ms)

---------------|----------|----------|----------|----------|-------------------|
File           |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line #s |
---------------|----------|----------|----------|----------|-------------------|
All files      |       90 |      100 |    66.67 |    94.74 |                   |
 index.test.ts |      100 |      100 |      100 |      100 |                   |
 index.ts      |      100 |      100 |      100 |      100 |                   |
 model.ts      |    66.67 |      100 |    33.33 |       80 |                 3 |
---------------|----------|----------|----------|----------|-------------------|

Исходный код: https://github.com/mrdulin/mocha-chai-sinon-codelab/tree/master/src/stackoverflow/60034220

...