0
votes

In mocha, I try to test material-ui's RadioButton using engyme's mount but an error apears.

Are there any ways to avoid this?

code: package.json


    {
        "name": "testradiobutton",
        "version": "1.0.0",
        "description": "",
        "main": "index.js",
        "scripts": {
            "test": "NODE_ENV=nodes mocha --compilers js:babel-register --require babel-polyfill ./nodes/test.setup.js --recursive $(find nodes -name '*.spec.js')"
      },
        "author": "",
        "license": "ISC",
        "devDependencies": {
            "babel-core": "^6.26.0",
            "babel-loader": "^7.1.2",
            "babel-polyfill": "^6.26.0",
            "babel-preset-es2015": "^6.24.1",
            "babel-preset-es2016": "^6.24.1",
            "babel-preset-power-assert": "^1.0.0",
            "babel-preset-react": "^6.24.1",
            "babel-preset-stage-0": "^6.24.1",
            "babel-register": "^6.26.0",
            "enzyme": "^2.9.1",
            "jsdom": "^11.3.0",
            "mocha": "^3.5.3",
            "react-test-renderer": "^15.6.2",
            "power-assert": "^1.4.4",
            "webpack": "^3.5.6",
            "webpack-init": "^0.1.2"
        },
        "dependencies": {
            "flexboxgrid": "^6.3.1",
            "material-ui": "^0.19.4",
            "prop-types": "^15.6.0",
            "react": "^15.6.2",
            "react-dom": "^15.6.2",
            "react-flexbox-grid": "^1.1.5"
        }
    }

sample.spec.js ```

import React from 'react';
import {mount} from 'enzyme';

import getMuiTheme from 'material-ui/styles/getMuiTheme';
import PropTypes from 'prop-types';
import {RadioButton, RadioButtonGroup} from 'material-ui/RadioButton';

describe('material ui', () => {
    it('can use with in mocha on enzyme', () => {
        const muiTheme = getMuiTheme();
        const wrapper = mount(
            <RadioButton
                value="foo"
                label="bar"
            />,
            {
                context: {muiTheme},
                childContextTypes: {muiTheme: PropTypes.object}
            });
    });
});

```

test.setup.js


    import {JSDOM} from 'jsdom';

    const jsdom = new JSDOM('');

    const {window} = jsdom;

    function copyProps(src, target) {
        const props = Object.getOwnPropertyNames(src)
            .filter(prop => typeof target[prop] === 'undefined')
            .map(prop => Object.getOwnPropertyDescriptor(src, prop));
        Object.defineProperties(target, props);
    }

    global.window = window;
    global.FormData = window.FormData;
    global.document = window.document;
    global.navigator = {
        userAgent: 'node.js',
        display: ''
    };
    global.display = 'block';
    copyProps(window, global);

error

> NODE_ENV=nodes mocha --compilers js:babel-register --require babel-polyfill ./nodes/test.setup.js --recursive $(find nodes -name '*.spec.js')



  material ui
    1) can use with in mocha on enzyme


  0 passing (160ms)
  1 failing

  1) material ui can use with in mocha on enzyme:
     TypeError: Cannot set property 'display' of undefined
      at Object.setValueForStyles (node_modules/react-dom/lib/CSSPropertyOperations.js:195:26)
      at ReactDOMComponent._updateDOMProperties (node_modules/react-dom/lib/ReactDOMComponent.js:888:29)
      at ReactDOMComponent.mountComponent (node_modules/react-dom/lib/ReactDOMComponent.js:518:12)
      at Object.mountComponent (node_modules/react-dom/lib/ReactReconciler.js:43:35)
      at ReactCompositeComponentWrapper.performInitialMount (node_modules/react-dom/lib/ReactCompositeComponent.js:368:34)
      at ReactCompositeComponentWrapper.mountComponent (node_modules/react-dom/lib/ReactCompositeComponent.js:255:21)
      at Object.mountComponent (node_modules/react-dom/lib/ReactReconciler.js:43:35)
      at ReactCompositeComponentWrapper.performInitialMount (node_modules/react-dom/lib/ReactCompositeComponent.js:368:34)
      at ReactCompositeComponentWrapper.mountComponent (node_modules/react-dom/lib/ReactCompositeComponent.js:255:21)
      at Object.mountComponent (node_modules/react-dom/lib/ReactReconciler.js:43:35)
      at ReactCompositeComponentWrapper.performInitialMount (node_modules/react-dom/lib/ReactCompositeComponent.js:368:34)
      at ReactCompositeComponentWrapper.mountComponent (node_modules/react-dom/lib/ReactCompositeComponent.js:255:21)
      at Object.mountComponent (node_modules/react-dom/lib/ReactReconciler.js:43:35)
      at ReactDOMComponent.mountChildren (node_modules/react-dom/lib/ReactMultiChild.js:234:44)
      at ReactDOMComponent._createInitialChildren (node_modules/react-dom/lib/ReactDOMComponent.js:701:32)
      at ReactDOMComponent.mountComponent (node_modules/react-dom/lib/ReactDOMComponent.js:520:12)
      at Object.mountComponent (node_modules/react-dom/lib/ReactReconciler.js:43:35)
      at ReactDOMComponent.mountChildren (node_modules/react-dom/lib/ReactMultiChild.js:234:44)
      at ReactDOMComponent._createInitialChildren (node_modules/react-dom/lib/ReactDOMComponent.js:701:32)
      at ReactDOMComponent.mountComponent (node_modules/react-dom/lib/ReactDOMComponent.js:520:12)
      at Object.mountComponent (node_modules/react-dom/lib/ReactReconciler.js:43:35)
      at ReactDOMComponent.mountChildren (node_modules/react-dom/lib/ReactMultiChild.js:234:44)
      at ReactDOMComponent._createInitialChildren (node_modules/react-dom/lib/ReactDOMComponent.js:701:32)
      at ReactDOMComponent.mountComponent (node_modules/react-dom/lib/ReactDOMComponent.js:520:12)
      at Object.mountComponent (node_modules/react-dom/lib/ReactReconciler.js:43:35)
      at ReactDOMComponent.mountChildren (node_modules/react-dom/lib/ReactMultiChild.js:234:44)
      at ReactDOMComponent._createInitialChildren (node_modules/react-dom/lib/ReactDOMComponent.js:701:32)
      at ReactDOMComponent.mountComponent (node_modules/react-dom/lib/ReactDOMComponent.js:520:12)
      at Object.mountComponent (node_modules/react-dom/lib/ReactReconciler.js:43:35)
      at ReactCompositeComponentWrapper.performInitialMount (node_modules/react-dom/lib/ReactCompositeComponent.js:368:34)
      at ReactCompositeComponentWrapper.mountComponent (node_modules/react-dom/lib/ReactCompositeComponent.js:255:21)
      at Object.mountComponent (node_modules/react-dom/lib/ReactReconciler.js:43:35)
      at ReactCompositeComponentWrapper.performInitialMount (node_modules/react-dom/lib/ReactCompositeComponent.js:368:34)
      at ReactCompositeComponentWrapper.mountComponent (node_modules/react-dom/lib/ReactCompositeComponent.js:255:21)
      at Object.mountComponent (node_modules/react-dom/lib/ReactReconciler.js:43:35)
      at ReactCompositeComponentWrapper.performInitialMount (node_modules/react-dom/lib/ReactCompositeComponent.js:368:34)
      at ReactCompositeComponentWrapper.mountComponent (node_modules/react-dom/lib/ReactCompositeComponent.js:255:21)
      at Object.mountComponent (node_modules/react-dom/lib/ReactReconciler.js:43:35)
      at ReactCompositeComponentWrapper.performInitialMount (node_modules/react-dom/lib/ReactCompositeComponent.js:368:34)
      at ReactCompositeComponentWrapper.mountComponent (node_modules/react-dom/lib/ReactCompositeComponent.js:255:21)
      at Object.mountComponent (node_modules/react-dom/lib/ReactReconciler.js:43:35)
      at mountComponentIntoNode (node_modules/react-dom/lib/ReactMount.js:102:32)
      at ReactReconcileTransaction.perform (node_modules/react-dom/lib/Transaction.js:141:20)
      at batchedMountComponentIntoNode (node_modules/react-dom/lib/ReactMount.js:124:15)
      at ReactDefaultBatchingStrategyTransaction.perform (node_modules/react-dom/lib/Transaction.js:141:20)
      at Object.batchedUpdates (node_modules/react-dom/lib/ReactDefaultBatchingStrategy.js:60:26)
      at Object.batchedUpdates (node_modules/react-dom/lib/ReactUpdates.js:95:27)
      at Object._renderNewRootComponent (node_modules/react-dom/lib/ReactMount.js:317:18)
      at Object._renderSubtreeIntoContainer (node_modules/react-dom/lib/ReactMount.js:399:32)
      at Object.render (node_modules/react-dom/lib/ReactMount.js:420:23)
      at Object.renderIntoDocument (node_modules/react-dom/lib/ReactTestUtils.js:89:21)
      at renderWithOptions (node_modules/enzyme/build/react-compat.js:200:24)
      at new ReactWrapper (node_modules/enzyme/build/ReactWrapper.js:94:59)
      at mount (node_modules/enzyme/build/mount.js:19:10)
      at Context. (nodes/sample.spec.js:11:25)
1
Thanks for fix.GoobyeEarth

1 Answers

0
votes

You're not mounting any component.

I would expect to see a React element supplied to mount()

  const wrapper = mount(
    <RadioButton /> // must supply a React element
    ,
    {
      context: {muiTheme},
      childContextTypes: {muiTheme: PropTypes.object}
    }
  );