gpt4 book ai didi

javascript - 在禁用浏览器 Flash 插件的情况下运行 Karma 测试

转载 作者:行者123 更新时间:2023-11-27 23:01:17 24 4
gpt4 key购买 nike

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

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));
});
});
});

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

最佳答案

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

最好的方法是反转依赖关系,将责任转移到客户端在 MyComponent 之外移动时进行检查。并将其作为 Prop 传递。这称为 Dependency inversion principle .

对于测试,您可以运行一个将 prop 设置为 true 的测试,并将另一个设置为 false 的测试。

所以你会有 <MyComponent isMobile={true} />并在调用代码中调用swfObject。

关于javascript - 在禁用浏览器 Flash 插件的情况下运行 Karma 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37078898/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com