рдмрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ
рдЕрдЧрд░ рдореИрдВ sinon.createStubInstance(X)
рдЬрд╣рд╛рдВ рдПрдХреНрд╕ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдирд┐рдЬреА рд╕рджрд╕реНрдп рд╡рд╛рд▓рд╛ рд╡рд░реНрдЧ рд╣реИ, рддреЛ рдореБрдЭреЗ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдорд┐рд▓рддреА рд╣реИрдВ рдЬреИрд╕реЗ:
рдкреНрд░рдХрд╛рд░ рдХрд╛ рддрд░реНрдХ 'SinonStubbedInstance
' рдкреНрд░рдХрд╛рд░ 'рдлреВ' рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рдЖрдмрдВрдЯрд┐рдд рдирд╣реАрдВ рд╣реИред
рд╕рдВрдкрддреНрддрд┐ '_private' рдкреНрд░рдХрд╛рд░ 'SinonStubbedInstance . рдореЗрдВ рдЧреБрдо рд╣реИ' рд▓реЗрдХрд┐рди 'рдлреВ' рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
describe('SinonTest', () => {
class Foo {
public talk() {
return 'hi';
}
private _private() {
return null;
}
}
function printSpeech(foo: Foo) {
console.log(foo.talk());
}
it('should allow you to pass a stub as a the original', () => {
const mockFoo = sinon.createStubInstance(Foo);
printSpeech(mockFoo);
});
});
рдкреНрд░рдЬрдирди рдХрд░рдирд╛
рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрджрдо:
printSpeech(mockFoo)
. рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди рдореЗрдВ рддреНрд░реБрдЯрд┐ рджреЗрдЦреЗрдВрдЕрдкреЗрдХреНрд╖рд┐рддреН рд╡реНрдпрд╡рд╣рд╛рд░
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдмрд┐рдирд╛ рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рдХреЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдореБрдЭреЗ _private() рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ, рди рд╣реА рдореИрдВ рд╕реАрдзреЗ рдЗрд╕рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд░рдЦрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдмрд┐рд▓реНрдб рдЯрд╛рдЗрдо рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЬреИрд╕реНрдореАрди jasmine.createSpyObj
рдХреЗ рд╕рд╛рде рдЗрд╕ рдорд╛рдорд▓реЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЪрдореЗрд▓реА рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЕрдиреНрдп рдЦрд╛рдорд┐рдпрд╛рдВ рд╣реИрдВред
рдкреНрд░рд╕рдВрдЧ (рдХреГрдкрдпрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдВ):
рдкрд░реНрдпрд╛рд╡рд░рдг: рдбрдмреНрд▓реВрдПрд╕рдПрд▓ рдЙрдмрдВрдЯреВ 16.04, рдиреЛрдб 10
рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬрд┐рдирдХрд╛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ: рдореЛрдЪрд╛ 5.2.0
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдпрд╣рд╛рдВ рдПрдХ рд╕реНрдЯреИрдХрдмреНрд▓рд┐рдЯреНрдЬ рд╣реИ https://stackblitz.com/edit/typescript-nfbgno?file=index.ts
рдпрд╣ process.stdout рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдорд╣рддреНрд╡рд╣реАрди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛ рд╕рдВрдХрд▓рди-рд╕рдордп рд╣реИ
рдпрд╣ рдПрдХ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореБрджреНрджрд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдореЗрдВ рд╕рдордп рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЙрд╕ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рдирд┐рдЬреА рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣реИ, рдпрд╣ рдЕрдкрдиреЗ рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рдгрд╛рд▓реА рдХреА рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХрдИ рддрд░реАрдХреЛрдВ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬрдм рдореИрдВрдиреЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рддреЛ рдореИрдВрдиреЗ рдЕрдХреНрд╕рд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдореЗрдВ рдЬрд╛рдХрд░ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдХреЗ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЙрд╕рдиреЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛, рдЗрд╕ рддрд░рд╣ рдХреЗ рдореБрджреНрджреЛрдВ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ред рдЖрдкрдХреЛ рднреА рдпрд╣реА рдХрд░рдирд╛ рд╣реИред
рдпрд╣ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛:
import { createStubInstance, StubbableType, SinonStubbedInstance, SinonStubbedMember } from 'sinon';
export type StubbedClass<T> = SinonStubbedInstance<T> & T;
export function createSinonStubInstance<T>(
constructor: StubbableType<T>,
overrides?: { [K in keyof T]?: SinonStubbedMember<T[K]> },
): StubbedClass<T> {
const stub = createStubInstance<T>(constructor, overrides);
return stub as unknown as StubbedClass<T>;
}
рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдХрд┐рд╕реА рднреА рдирд┐рдЬреА рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рддрд░рд╣ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ (рдФрд░ рдбрд┐рдЬрд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ)ред рдЗрд╕ рд░реИрдкрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдХреЗ рд╕рднреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХрд╛рд░реНрдпреЛрдВ/рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╕рд┐рдиреЙрди рдХреЗ рд╕реНрдЯрдм рд╣реЗрд▓реНрдкрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕, рдФрд░ StubbedClass рдХреЛ рдХреЛрдб рдкреВрд░реНрдгрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ
рдХреНрдпрд╛ @pauloavelar рдЙрддреНрддрд░ рдЕрднреА рднреА рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╕рдорд╛рдзрд╛рди рд╣реИ?
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдпрд╣ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛:
рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдХрд┐рд╕реА рднреА рдирд┐рдЬреА рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рддрд░рд╣ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ (рдФрд░ рдбрд┐рдЬрд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ)ред рдЗрд╕ рд░реИрдкрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдХреЗ рд╕рднреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХрд╛рд░реНрдпреЛрдВ/рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╕рд┐рдиреЙрди рдХреЗ рд╕реНрдЯрдм рд╣реЗрд▓реНрдкрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕, рдФрд░ StubbedClass рдХреЛ рдХреЛрдб рдкреВрд░реНрдгрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВрдЖрдкрдХреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЯреА рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрдз рдкреНрд░рдХрд╛рд░ рд╣реИред