在诗浓我可以做到以下几点:
var myObj = {
prop: 'foo'
};
sinon.stub(myObj, 'prop').get(function getterFn() {
return 'bar';
});
myObj.prop; // 'bar'
但是我怎么能用 Jest 做同样的事情呢?我不能只是用类似的东西覆盖函数jest.fn()
,因为它不会取代吸气剂
“无法设置get的值”
在诗浓我可以做到以下几点:
var myObj = {
prop: 'foo'
};
sinon.stub(myObj, 'prop').get(function getterFn() {
return 'bar';
});
myObj.prop; // 'bar'
但是我怎么能用 Jest 做同样的事情呢?我不能只是用类似的东西覆盖函数jest.fn()
,因为它不会取代吸气剂
“无法设置get的值”
对于遇到此答案的任何其他人,Jest 22.1.0 引入了监视 getter 和 setter 方法的能力。
编辑:就像下面scieslak 的回答一样,因为您可以监视 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')
Object.defineProperty(myObj, 'prop', {
get: jest.fn(() => 'bar'),
set: jest.fn()
});
天哪,我来过这里很多次了。最后找出正确的解决方案。如果您只关心间谍活动。去找@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)
})
})