Se moquant de la Fenêtre avec Sinon, de Moka, de l'Enzyme, et de Réagir
Je suis en train de se moquer de la fenêtre de l'objet pour un composant que j'utilise avec seulement quatre bibliothèques énumérés ci-dessus.
Je sais que cela peut être fait avec JSDom mais le client est à l'encontre de l'utiliser. Basé sur mes recherches tout simplement faire sinon.stub(fenêtre, "emplacement") devrait fonctionner, mais quand je lance mes tests, je reçois toujours la Fenêtre de undefined dans mon composant.
Actuellement le composant est appelé dans le rendu de retour {la fenêtre.emplacement.hôte}
toutes les pensées de ce que je fais de mal à obtenir sinon à talon qu'une seule pièce. Une fois que je stub ce morceau je peux alors me concentrer sur le test de la d'autres parties de la composante qui n'ont rien à voir avec fenêtre.
Ma Méthode D'Essai:
import React from 'react';
import { shallow } from 'enzyme';
import chai from 'chai';
chai.should();
import sinon from 'sinon';
import BillingStatementRow from '../BillingStatementRow';
describe('Test <BillingStatementRow /> Component', function() {
context('Function Testing', function() {
it('Test - onFieldChange - Make sure it handles NaN', function() {
var e = {target: {value: NaN}};
var window = { location : { host : "..." } };
var mockedOnChange = sinon.spy();
const wrapper = shallow (
<BillingStatementRow slds={''} key={'1'}
Id={'1'} inputValue={'0'} salesInvoice={'SIN0001'}
invoicedAmount={1000} duedate={'1461628800000'}
outstandingBalance={1000} receiptRemaining={1000}
amountAllocated={1000} onChange={mockedOnChange.bind(this,'BS0001')} />
);
wrapper.instance().onFieldChange('amountAllocated', e);
wrapper.update();
})
});
});
- Je suppose que vous avez déclaré
window
premier (comme un objet vide ou quelque chose)? Aussi, est-il disponible partout (c'est à dire est-il un mondial)? MODIFIER: hmm, jamais l'esprit,window.location
n'est pas une fonction, de toute façon, et Sinon ne peut stub fonctions. Encore, exactement ce que voulez-vous tester? Pourquoi ne pas déclarer un mondialwindow = { location : { host : "..." } }
? - Yep fenêtre est déclaré en premier mais il me donne toujours la fenêtre n'est pas défini.
- Essayez
global.window = { location : ... }
à la place. - Merci, on dirait qu'il a travaillé.
Vous devez vous connecter pour publier un commentaire.
Sinon stubs/espions se moque de travailler uniquement avec les fonctions. Dans ce cas, vous essayez de se moquer d'un mondial (imbriqué) variable, pour qui Sinon n'est pas le bon outil.
Au lieu de cela, comme dans un navigateur, vous pouvez créer un objet global qui se moque juste la bonne quantité de
window
de travailler avec votre composant, ce qui est facile car il n'accèdewindow.location.host
.Donc avant l'instanciation du composant, déclare ce qui suit: