Вы можете использовать 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