Próbuję wyszydzić obiekt okna dla składnika, którego używam z tylko czterech bibliotek wymienionych powyżej.Szydzenie okna z Sinon, Mocha, Enzyme i React
Wiem, że można to zrobić za pomocą JSDom, ale klient jest przeciwny używaniu go. Na podstawie moich badań, po prostu wykonanie sinon.stub (okno, "lokalizacja") powinno zadziałać, ale kiedy przeprowadzę swoje testy, nadal otrzymuję niezdefiniowane okno w moim komponencie.
Obecnie składnik nazywa się wewnątrz tynku zamian {window.location.host}
żadnych myśli, co robię źle, aby uzyskać sinon do skrótową, że jednym kawałku. Po tym, jak wyjmę ten fragment, mogę skupić się na testowaniu innych części tego komponentu, które nie mają nic wspólnego z oknem.
moja metoda testowa:
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();
})
});
});
Zakładam, że zadeklarowali 'window' pierwszy (jako pusty obiekt lub coś)? Czy jest on dostępny wszędzie (tzn. Czy jest globalny)? ** EDYTUJ **: hmm nieważne, 'window.location' nie jest funkcją, a Sinon może tylko odgryźć funkcje. Ale co dokładnie chcesz przetestować? Dlaczego po prostu nie ogłosić globalnego 'window = {location: {host:" ... "}}'? – robertklep
Okno Yep jest zadeklarowane jako pierwsze, ale nadal daje mi okno nie jest zdefiniowane. – DimlyAware
Zamiast tego spróbuj użyć 'global.window = {location: ...}. – robertklep