반응형
오브젝트의 getter 함수를 Jest로 모킹/바꾸는 방법
Sinon에서는 다음을 수행할 수 있습니다.
var myObj = {
prop: 'foo'
};
sinon.stub(myObj, 'prop').get(function getterFn() {
return 'bar';
});
myObj.prop; // 'bar'
하지만 내가 어떻게 제스트에게 똑같이 할 수 있을까?함수를 덮어쓸 수 없습니다.jest.fn()
getter를 대체할 수 없기 때문에
"get 값을 설정할 수 없음"
Jest 22.1.0은 이 답변을 우연히 접한 다른 사용자를 위해 getter 및 setter 메서드를 감시하는 기능을 도입했습니다.
편집: 아래 scieslak의 답변과 같이 getter 및 setter 메서드를 감시할 수 있기 때문에 다른 기능과 마찬가지로 Jest mock을 함께 사용할 수 있습니다.
class MyClass {
get something() {
return 'foo'
}
}
jest.spyOn(MyClass, 'something', 'get').mockReturnValue('bar')
const something = new MyClass().something
expect(something).toEqual('bar')
사용할 수 있습니다.
Object.defineProperty(myObj, 'prop', {
get: jest.fn(() => 'bar'),
set: jest.fn()
});
스파이 활동에만 관심이 있다면 @Franey의 답변을 받아보세요.단, 실제로 getter 값을 stub할 필요가 있는 경우에는 다음과 같이 합니다.
class Awesomeness {
get isAwesome() {
return true
}
}
describe('Awesomeness', () => {
it('is not always awesome', () => {
const awesomeness = new Awesomeness
jest.spyOn(awesomeness, 'isAwesome', 'get').mockReturnValue(false)
expect(awesomeness.isAwesome).toEqual(false)
})
})
나의 유니티 테스트 케이스에서는 외부 의존관계를 조롱할 것으로 예상되기 때문에 Tomaux의 답변에 따라 나는 이전의 조롱된 인스턴스가 아닌 실제 인스턴스를 사용해야 했다.각 함수는 아래 부분을 참조하십시오.
//declaration of MyExternalConfigService with getter
@Injectable()
export class MyExternalConfigService {
constructor(private readonly configService: ConfigService) {}
get myProp():string {
return this.configService.get<string>('context.myProp')
}
}
//beforeEach unit test configuration
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
providers: [
MyServiceToBeTested,
{
provide: MyExternalConfigService,
useValue: new MyExternalConfigService(new ConfigService())
}
]
}).compile()
service = module.get<MyServiceToBeTested>(
MyServiceToBeTested
)
configService = module.get<MyExternalConfigService>MyExternalConfigService)
})
//mocking a value to your test case
it('my test case', ()=>{
jest
.spyOn(configService, 'myProp', 'get')
.mockImplementationOnce(() => 'mockedValue')
...
)
언급URL : https://stackoverflow.com/questions/43697455/how-to-mock-replace-getter-function-of-object-with-jest
반응형
'programing' 카테고리의 다른 글
React 컴포넌트 상태로 객체를 저장하시겠습니까? (0) | 2023.03.10 |
---|---|
Oracle의 듀얼 테이블이란 무엇입니까? (0) | 2023.03.10 |
표현식을 기반으로 각도를 사용하여 팝오버(또는 툴팁)를 동적으로 열거나 닫는 좋은 방법? (0) | 2023.03.10 |
Wordpress 역할 사용자 지정 기능이 true로 설정되었지만 false를 반환합니다. (0) | 2023.03.10 |
Next.js에서 "필요한 매개 변수(id)가 getStaticPaths에서 문자열로 제공되지 않았습니다" 오류가 발생했습니다. (0) | 2023.03.10 |