首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >禁用浏览器flash插件的情况下运行Karma测试

禁用浏览器flash插件的情况下运行Karma测试
EN

Stack Overflow用户
提问于 2016-05-07 02:12:49
回答 1查看 65关注 0票数 1

我正在尝试测试一个组件的一部分,将不会显示,如果浏览器没有Flash插件。该组件在swfObject和下面提到的逻辑的帮助下检测flash插件。

MyComponent.js

代码语言:javascript
复制
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

代码语言:javascript
复制
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));
    });
  });
});

问题是,当karma启动chrome并检测到flash插件时,this.state.isMobile被设置为false。可以想象,如果测试需要手动禁用Chrome的flash插件,那么测试也无法工作。

EN

回答 1

Stack Overflow用户

发布于 2016-05-07 02:34:33

测试swfObject是否正常工作不是测试的目的。

最好的方法是颠倒依赖关系,每当客户端在MyComponent之外移动时,转移检查的责任,并将其作为一个道具传递进来。这称为Dependency inversion principle

对于测试,您可以在prop设置为true的情况下运行一个测试,在prop设置为false的情况下运行另一个测试。

因此,您应该在调用代码中使用<MyComponent isMobile={true} />并调用swfObject。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37078898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档