我正在尝试为我正在使用的组件模拟窗口对象,仅使用上述四个库。
我知道可以使用JSDom来完成,但客户反对使用它。根据我的研究,简单地执行sinon.stub(window,'location')即可工作,但当我运行测试时,我仍然在我的组件中得到未定义的Window。
目前,在渲染中调用了该组件返回{window.location.host}。
有任何想法我做错了什么以使sinon能够支持那个片段。 一旦我支持了那一部分,就可以将注意力集中在测试与窗口无关的该组件的其他部分。
我的测试方法:
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 : "..." } }
呢? - robertklepglobal.window = { location : ... }
替代。 - robertklep