【问题标题】:mocha with redux: expected undefined to equal true带有redux的摩卡:预期未定义等于真
【发布时间】:2017-01-25 14:54:22
【问题描述】:

我正在尝试为使用 redux 和 react-intl 的 react 组件编写测试:

import React from 'react';
import { expect } from 'chai';
import { shallow, mount, render } from 'enzyme';
import Navbar from 'Navbar';
import configureMockStore from 'redux-mock-store'
import thunk from 'redux-thunk'
import { Provider } from 'react-redux';
import messages from '../src/l10n/en.json'
import { IntlProvider } from 'react-intl'

const middlewares = [ thunk ]
const mockStore = configureMockStore(middlewares)
const store = mockStore({})


describe('<Navbar />', () => {

  it('calls componentDidMount', () => {
    const wrapper = mount(
      <Provider store={store}>
        <IntlProvider locale={ "en" } messages={ messages }>
          <Navbar />
        </IntlProvider>
      </Provider>
    );
    expect(Navbar.prototype.componentDidMount.calledOnce).to.equal(true);
  });
});

但我得到了这个结果:

  <Navbar />
    1) calls componentDidMount


  0 passing (73ms)
  1 failing

  1) <Navbar /> calls componentDidMount:
     AssertionError: expected undefined to equal true

谁能给我一个建议,我该如何解决它?

【问题讨论】:

    标签: reactjs redux mocha.js react-intl


    【解决方案1】:

    错误是因为,componentDidMount 在测试中没有被窥探。您可以使用sinon 来解决此问题。例如,

    import React from 'react';
    import { expect } from 'chai';
    import { shallow, mount, render } from 'enzyme';
    import Navbar from 'Navbar';
    import configureMockStore from 'redux-mock-store'
    import thunk from 'redux-thunk'
    import { Provider } from 'react-redux';
    import messages from '../src/l10n/en.json'
    import { IntlProvider } from 'react-intl'
    import { spy } from 'sinon';
    
    const middlewares = [ thunk ]
    const mockStore = configureMockStore(middlewares)
    const store = mockStore({})
    
    
    describe('<Navbar />', () => {
      it('calls componentDidMount', () => {
        spy(Navbar.prototype, 'componentDidMount');
        const wrapper = mount(
          <Provider store={store}>
            <IntlProvider locale={ "en" } messages={ messages }>
              <Navbar />
            </IntlProvider>
          </Provider>
        );
        expect(Navbar.prototype.componentDidMount.calledOnce).to.equal(true);
      });
    });
    

    附带说明:- 如果您想在测试中使用 react-intl,我建议使用 here 中描述的帮助函数

    【讨论】:

    猜你喜欢
    • 2017-12-06
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 2015-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多