Ho un componente di risposta che effettua chiamate AJAX nel metodo componentDidMount
. Mentre provo a renderizzarlo usando React.addons.TestUtils
, il componente viene sottoposto a rendering senza effettuare chiamate AJAX. Come potrei testare la reazione del componente usando il jest in modo che faccia una chiamata AJAX? Dovrei aver bisogno di usare phantomJS (o browser come env) per fornire le abilità DOM alla reazione del componente?Il test dell'unità reagisce al componente che effettua chiamate ajax utilizzando JEST
Reagire Componente:
return React.createClass({
componentDidMount : function() {
$.ajax({
... makes http request
})
}
render : function() {
<div>
//view logic based on ajax response...
</div>
}
});
TestCase:
jest.dontMock(../MyComponent);
var React = require('react/addons');
var TestUtils = React.addons.TestUtils;
var MyComponent = require(../MyComponent);
describe('Sample Test', function(){
it('To Render the component', function() {
var component = <MyComponent />;
var DOM = TestUtils.renderIntoDocument(component);
.... // Some other code...
});
})
Puoi ampliare la tua risposta per meglio descrivere come la burla deriderà $ .ajax? –
Il set-up predefinito per jest ride automaticamente tutto tranne le cose che hai impostato in modo specifico per non deridere. Diciamo che chiamate $ .ajax con un callback 'success' e' error'. $ .ajax.calls è l'array fornito di jest per la funzione $ .ajax. Otteniamo la prima chiamata indicizzando [0], e quindi il primo argomento con un altro [0] ($ .ajax di solito ha solo un argomento, un dizionario/oggetto javascript).Questo ci dà accesso ai callback di successo ed errore, permettendoci di passare qualsiasi input arbitrario che ci aspettiamo su quelle funzioni e testarle. Spero che abbia senso? –