위에 나열된 네 개의 라이브러리 만 사용하는 구성 요소의 창 개체를 조롱하려고합니다.Sinon, Mocha, Enzyme, React가있는 조롱 창
나는 JSDom으로 할 수 있지만 클라이언트는 그것을 사용하지 않는다는 것을 알고있다. 내 연구를 기반으로 단순히 sinon.stub (window, 'location')을 수행해야하지만 테스트를 실행해도 내 구성 요소에는 Window가 정의되지 않습니다.
현재 구성 요소는 한 조각 것을 스텁 sinon를 얻기 위해 내가 잘못 뭐하는 거지로 렌더링 반환 {window.location.host}
어떤 생각에서라고합니다. 일단 그 부분을 뽑아 내면 창과 아무 관련이없는 그 구성 요소의 다른 부분을 테스트하는 데 집중할 수 있습니다.
내 시험 방법 :
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();
})
});
});
내가 (빈 객체 또는 무언가로) 당신은'window' 첫번째 선언했다고 가정 :
는그래서 구성 요소를 인스턴스화하기 전에, 다음과 같은 선언 ? 또한 모든 곳에서 사용할 수 있습니까 (예 : 글로벌)? ** 편집 ** : 흠, 어쨌든'window.location'은 함수가 아니므로 Sinon은 함수를 스텁 할 수 있습니다. 그럼에도 정확히 무엇을 테스트하고 싶습니까? 왜 그냥 전역'window = {location : {host : "..."}}'선언할까요? – robertklep
넵 창이 먼저 선언되었지만 아직 나에게 창이 정의되지 않았다. – DimlyAware
'global.window = {location : ...}'을 대신 사용해보십시오. – robertklep