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