6
我試圖模擬出我只用上面列出的四個庫的組件的窗口對象。用Sinon,摩卡,酶和反應嘲笑窗口
我知道它可以用JSDom完成,但客戶端反對使用它。根據我的研究,簡單地做sinon.stub(window,'location')應該可以工作,但是當我運行我的測試時,我的組件中仍然未定義Window。
目前該組件被稱爲渲染回報{} 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
Yep窗口是首先聲明但它仍然給我窗口沒有定義。 – DimlyAware
改爲嘗試'global.window = {location:...}'。 – robertklep