Testing TypeScript Code
Stubbed Dependency
A stub replaces an outside dependency with a predictable in-memory value.
stub
A stub implements the same small interface as a dependency, but it returns fixed data for the test.
Stubbed Dependency
stub.ts
Replay: real traced execution (multi-file project)
type PriceSource = {
getPrice(sku: string): number;
};
function totalFor(source: PriceSource, sku: string, quantity: number): number {
return source.getPrice(sku) * quantity;
}
const price: number = 250;
const stubSource: PriceSource = {
getPrice: () => price,
};
const total: number = totalFor(stubSource, "book", 3);
console.log(`total=${total}`);
type PriceSource = {
getPrice(sku: string): number;
};
function totalFor(source: PriceSource, sku: string, quantity: number): number {
return source.getPrice(sku) * quantity;
}
const price: number = 400;
const stubSource: PriceSource = {
getPrice: () => price,
};
const total: number = totalFor(stubSource, "book", 3);
console.log(`total=${total}`);
price ← 250, stubSource ← [object Object]
6 return source.getPrice(sku) * quantity;7}89const price→ 250: number = 250; //@price=40010const stubSource→ [object Object]: PriceSource = {11 getPrice: () => price,12};1314const total: number = totalFor(stubSource[object Object], "book", 3);function totalFor(source: PriceSource, sku: string, quantity: number):…
2 getPrice(sku: string): number;3};45function totalFor(source[object Object]: PriceSource, skubook: string, quantity3: number): number {6 return source.getPrice(sku) * quantity3;7}total ← 750
11 getPrice: () => price,12};1314const total→ 750: number = totalFor(stubSource[object Object], "book", 3);1516console.log(`total=${total750}`);outputtotal=750
price ← 400, stubSource ← [object Object]
6 return source.getPrice(sku) * quantity;7}89const price→ 400: number = 400;10const stubSource→ [object Object]: PriceSource = {11 getPrice: () => price,12};1314const total: number = totalFor(stubSource[object Object], "book", 3);function totalFor(source: PriceSource, sku: string, quantity: number):…
2 getPrice(sku: string): number;3};45function totalFor(source[object Object]: PriceSource, skubook: string, quantity3: number): number {6 return source.getPrice(sku) * quantity3;7}total ← 1200
11 getPrice: () => price,12};1314const total→ 1200: number = totalFor(stubSource[object Object], "book", 3);1516console.log(`total=${total1200}`);outputtotal=1200