シノンでは、次のことができます。
_var myObj = {
prop: 'foo'
};
sinon.stub(myObj, 'prop').get(function getterFn() {
return 'bar';
});
myObj.prop; // 'bar'
_
しかし、Jestでも同じことができますか? jest.fn()
のような関数で関数を上書きすることはできません。ゲッターを置き換えないためです
「getの値を設定できません」
Object.defineProperty(myObj, 'prop', {
get: jest.fn(() => 'bar'),
set: jest.fn()
});
この答えに出くわした誰かのために、Jest 22.1.0は getterおよびsetterメソッドのスパイ の機能を導入しました。
編集: scieslak's answer 以下のように、ゲッターメソッドとセッターメソッドをスパイできるため、他の関数と同じようにJestモックを使用できます:
class MyClass {
get something() {
return 'foo'
}
}
jest.spyOn(MyClass, 'something', 'get').mockReturnValue('bar')
const something = new MyClass().something
expect(something).toEqual('bar')
OMG私はここに何度も来ました。最後に、これに対する適切な解決策を見つけてください。スパイだけを気にするなら。 @Franeyの答えを探してください。ただし、実際にゲッターの値をスタブする必要がある場合は、これを行うことができます
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)
})
})