Sinon, je peux faire ce qui suit:
var myObj = {
prop: 'foo'
};
sinon.stub(myObj, 'prop').get(function getterFn() {
return 'bar';
});
myObj.prop; // 'bar'
Mais comment puis-je faire la même chose avec Jest? Je ne peux pas simplement écraser la fonction avec quelque chose comme jest.fn()
, car elle ne remplacera pas le getter.
"ne peut pas définir la valeur de get"
Vous pouvez utiliser Object.defineProperty
Object.defineProperty(myObj, 'prop', {
get: jest.fn(() => 'bar'),
set: jest.fn()
});
Jest 22.1.0 introduit la possibilité de espionner les méthodes de lecture et de définition :
class MyClass {
get something() {
return true
}
}
const spy = jest.spyOn(MyClass, 'something', 'get')
const something = new MyClass().something
expect(spy).toHaveBeenCalledTimes(1) // true
OMG Je suis venu ici tellement de fois. Enfin, trouvez la solution qui convient pour cela… Si vous vous souciez uniquement d’espionnage. Optez pour la réponse de @Franey. Cependant, si vous devez réellement modifier une valeur pour le getter, voici comment vous pouvez le faire.
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)
})
})