1

ブラウザに Flash プラグインがないと表示されないコンポーネントの一部をテストしようとしています。コンポーネントは、 swfObjectと以下に示すロジックを使用して、フラッシュ プラグインを検出します。

MyComponent.js

export default class MyComponent extends Component {
  static propTypes = {
     // props...
  };

  static contextTypes = {
    router: PropTypes.object.isRequired,
  };

  constructor() {
    super();
    this.state = {
      isMobile: true
    };
  }

componentDidMount() {
    const flashVersion = require('../../../client/utils/detectFlash')();
    if ((flashVersion && flashVersion.major !== 0)) {
      /* eslint-disable */
      this.setState({isMobile: false});
      /* eslint-enable */
    }
  }
  //...
  render() {
  //...
    return (
      //...
        { !this.state.isMobile && (
          <div className="xyz">
            <p>XYZ: this content only shows up when flash has been detected</p>
          </div>)
        }
    );
  }
}

MyComponent-test.js

import React from 'react';
import {mount} from 'enzyme';
import chai, {expect} from 'chai';
import chaiEnzyme from 'chai-enzyme';
import configureStore from 'redux-mock-store';
import { Provider } from 'react-redux';
import {MyComponent} from '../../common/components';

chai.use(chaiEnzyme());

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

  describe('mobile/flash disabled', () => {

    const mockStore = configureStore({});
    const store = mockStore({});

    it('Does not render xyz', () => {
      const wrapper = mount(
        <Provider store={store} key="provider">
          <MyComponent {...params}/>
        </Provider>
      );
      expect(wrapper.find('.xyz').to.have.length(0));
    });
  });
});

問題は、カルマがクロムを起動し、フラッシュプラグインが検出されるため、this.state.isMobile が false に設定されていることです。ご想像のとおり、Chrome のフラッシュ プラグインを手動で無効にする必要がある場合、テストも機能しません。

4

1 に答える 1