materialuiupgraded
Version:
Material-UI's workspace package
64 lines (54 loc) • 1.87 kB
JavaScript
import React from 'react';
import { assert } from 'chai';
import { spy } from 'sinon';
import createBroadcast from 'brcast';
import { createShallow, createMount } from '../test-utils';
import { CHANNEL } from './themeListener';
import withTheme from './withTheme';
const Empty = () => <div />;
// eslint-disable-next-line react/prefer-stateless-function
class EmptyClass extends React.Component {
render() {
return <div />;
}
}
describe('withTheme', () => {
let shallow;
let context;
let mount;
let broadcast;
before(() => {
shallow = createShallow();
mount = createMount();
broadcast = createBroadcast();
context = { [CHANNEL]: broadcast };
});
after(() => {
mount.cleanUp();
});
it('should use the theme provided by the context', () => {
const theme = { themeProperty: 'foo' };
broadcast.setState(theme);
const ThemedComponent = withTheme()(Empty);
const wrapper = shallow(<ThemedComponent />, { context });
assert.strictEqual(wrapper.props().theme, theme);
});
it('should rerender when the theme is updated', () => {
const theme = { themeProperty: 'foo' };
broadcast.setState(theme);
const ThemedComponent = withTheme()(Empty);
const wrapper = mount(<ThemedComponent />, { context });
assert.strictEqual(wrapper.instance().state.theme, theme);
const newTheme = { themeProperty: 'bar' };
broadcast.setState(newTheme);
assert.strictEqual(wrapper.instance().state.theme, newTheme);
});
describe('prop: innerRef', () => {
it('should provide a ref on the inner component', () => {
const ThemedComponent = withTheme()(EmptyClass);
const handleRef = spy();
mount(<ThemedComponent innerRef={handleRef} />);
assert.strictEqual(handleRef.callCount, 1);
});
});
});