在Sinon,我可以做到以下几点:
var myObj = {
prop: 'foo'
};
sinon.stub(myObj, 'prop').get(function getterFn() {
return 'bar';
});
myObj.prop; // 'bar'
但我怎么能和Jest一样呢?
我不能用jest.fn()
覆盖函数,因为它不会取代getter
"无法设置get"
的值
答案 0 :(得分:17)
Object.defineProperty(myObj, 'prop', {
get: jest.fn(() => 'bar'),
set: jest.fn()
});
答案 1 :(得分:17)
对于任何绊倒这个答案的人来说,Jest 22.1.0引入了spy on getter and setter methods的能力。
编辑:就像下面的scieslak's answer一样,因为你可以监视getter和setter方法,你可以使用Jest模拟它们,就像使用任何其他函数一样:
class MyClass {
get something() {
return 'foo'
}
}
jest.spyOn(MyClass, 'something', 'get').mockReturnValue('bar')
const something = new MyClass().something
expect(something).toEqual('bar')
答案 2 :(得分:5)
OMG我去过这里很多次了。最后找出解决方案。 如果您只在乎间谍。寻找@Franey的答案。但是,如果您实际上需要为getter存根一个值,这就是您可以做到的方式
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)
})
})