Ich schreibe gerade Tests für React-Komponenten mit Jest an Enzyme. Ich stehe fest, wenn ich eine Klasseneigenschaftsfunktion, die mit Pfeilsyntax geschrieben ist, verspotten muss: Der Schein wird nicht angewendet. HierJest/Enzyme kann Klasseneigenschaft nicht vortäuschen
ist ein Auszug der getesteten Komponente:
class MaClass extends React.Component {
...
componentWillMount() {
this.getNotifications()
}
getNotifications =() => {
axios.get(window.Routing.generate(
'api_notifications_get_collection'
), {
headers: {
'Accept': 'application/json'
}
}).then(response => {
this.setState({
notifications: response.data
})
}).catch(error => {
console.log('Error : ', error)
})
}
...
}
Und hier ist der Test:
import React from 'react'
import { configure, shallow } from 'enzyme'
import Adapter from 'enzyme-adapter-react-15'
import NotificationsComponent from './NotificationsComponent'
configure({adapter: new Adapter()})
describe('Testing NotificationsComponent',() => {
/**
* This should call getNotifications
*/
test('getNotifications should be called',() => {
let wrapper = shallow(<NotificationsComponent />)
const getMock = jest.fn()
wrapper.instance().getNotifications = getMock
wrapper.update()
expect(getMock).toHaveBeenCalled()
})
})
Soweit zu lesen, das ist der richtige Weg für regelmäßige Methoden zu tun. Aber es scheint, dass Klasseneigenschaftsfunktionen, die mit Pfeilsyntax geschrieben sind, auf diese Weise nicht verspottet werden können.
Mein Terminal wirft einen Fehler über das, was im Inneren des Bauteils Methode getestet ist:
TypeError: Cannot read property 'generate' of undefined
was bedeutet, dass das Mock nicht durchlaufen wird.
Würde jemand darauf hinweisen, wo ist mein Fehler bitte? Vielen Dank.
Ich habe 'mount' auch ohne Glück benutzt. – Neovea
'mount' wird deine Komponente zurücksetzen ... du könntest' getNotifications' als prop übergeben, wie hier https://stackoverflow.com/questions/41598559/how-to-spy-componentwillmount-using-jest-and-enzyme . Wenn Sie Redux oder andere Zustandsverwaltung verwenden, wäre dies in jedem Fall von Vorteil. – lipp
Eigentlich bin ich mir nicht sicher, ob dies meine Bedürfnisse erfüllt, wie in seinem Beispiel definiert er 'this.props.fetch ('data')'. Ich teste keine Requisiten, ich teste Klasseneigenschaften, wie in dem Beispiel, das ich zuvor gegeben habe: 'getNotifications =() => {...}'. Der wichtige Teil hier ist, dass es '=() =>' verwendet. – Neovea