玩笑,酶测试因未定义窗口变量而失败

问题描述 投票:0回答:1

我正在尝试创建一个窗口对象以传递到包含窗口变量的测试中。测试看起来像:

const baseProps = {};

Enzyme.configure({ adapter: new Adapter() });

const baseWrapper = shallow(
  <DivisionOrderIndex {...baseProps} />,
);

describe('<DivisionOrderIndex />', () => {
  test('renders the MsDataGridServer', () => {
    expect(baseWrapper.find(MsDataGridBulkDelete))
      .toHaveLength(1);
  });

我收到的错误消息是:

TypeError: Cannot read property 'read_only' of undefined

      300 |             </TitleButton>
      301 |           </div>
    > 302 |           {!window.jsdata.read_only && (
          |                           ^
      303 |             <div id="page-buttons">
      304 |               <a href="/division_order_create" className="btn btn-primary">Create New</a>
      305 |             </div>

我已经尝试将数据添加到我的window对象中,如下所示:

describe('<DivisionOrderIndex />', () => {
  Object.defineProperty(window, 'jsdata', {
      read_only: false,
    });
  test('renders the MsDataGridServer', () => {
    expect(baseWrapper.find(MsDataGridBulkDelete))
      .toHaveLength(1);
  });

但是我仍然遇到相同的错误。这是传递窗口对象或变量的正确方法吗?任何输入将不胜感激。

reactjs jestjs enzyme
1个回答
0
投票

这不是将属性添加到对象的方式。您在这里所做的是添加描述您的对象的描述符属性,您只能在其中设置其中的少数几个。 writableconfigurable

您需要像这样在setupTests.js文件中模拟窗口对象:

window.jsdata = {
  read_only: false
}
© www.soinside.com 2019 - 2024. All rights reserved.