当前位置: 首页 > 面试题库 >

如何使用酶测试React组件属性的样式

樊奇思
2023-03-14
问题内容

我正在尝试测试React组件的样式属性。在测试中获取样式参数的最佳方法是什么?

目前,我最好的选择是测试HTML是否包含字符串,但是我认为有一个更好的选择。

案件:

it('Should render large image when desktop', () => {
    const dummyUrl = 'http://dummyUrl';
    const wrapper = shallow(
      <MockedStore
        initialState={{
          app: fromJS({ browser: { desktop: true } }),
        }}
      >
        <LandingHero bigImage={dummyUrl} />
      </MockedStore>
    );
  });

要测试的组件是:

// @flow
import React, { Component } from 'react';
import gc from 'styles/core.scss';
import $ from 'jquery';
import DownloadButton from 'components/DownloadButton';
import withStyles from 'isomorphic-style-loader/lib/withStyles';
import DownArrow from 'components/DownArrow';
import { connect } from 'react-redux';
import type { Map } from 'immutable';
import c from './styles.scss';

@withStyles([gc, c])
@connect(({ app }) => ({ app }))
class LandingHero extends Component {
  componentDidMount() {
    if ($(window).height() > 0) { // Necesary for webpack dev server
      $(this.hero).css('height', $(window).height() - 46);
    }
  }

  hero: HTMLElement;

  props: {
    app: Map<string, any>,
    copy: string,
    secondaryText: string,
    thirdText: string,
    bigImage?: string,
    smallImage: string,
  }

  render() {
    const { copy, secondaryText, thirdText } = this.props;
    const browser = this.props.app.has('browser') ? this.props.app.get('browser') : {};
    const backgroundImage = browser.desktop ? this.props.bigImage : this.props.smallImage;

    return (
      <div
        className={`${c.hero} ${gc.textCenter}` +
        ` ${gc.alignMiddle} ${gc.alignCenter} ${gc.row} ${gc.expanded}`}
        ref={(hero) => { this.hero = hero; }}
        style={{
          margin: 0,
          position: 'relative',
          background: `linear-gradient(to bottom, rgba($ixdarkprimary, .3), rgba($ixdarkprimary, .3)), url(${backgroundImage || ''})`,
        }}
      >
        <div className={`${gc.row} ${gc.alignCenter} ${gc.alignMiddle} ${gc.column} ${gc.medium10}`}>
          <div className={`${gc.textCenter}`}>
            <div
              className={`${gc.white} ${c.mainText} ${c.copy}`}
            >
              { copy }
            </div>
            <div className={`${gc.small6} ${gc.smallOffset3} ${gc.medium4} ${gc.mediumOffset4}`} style={{ marginBottom: 45 }}>
              <DownloadButton />
            </div>
            <div className={`${gc.white} ${gc.fontBold} ${gc.font24}`}>{secondaryText}</div>
            <p className={`${gc.white} ${gc.font20}`}>{thirdText}</p>
          </div>
          <DownArrow goTo="#content" />
        </div>
      </div>
    );
  }
}

export default LandingHero;

问题答案:

您可以使用此方法。它返回ReactElement。

let containerStyle = container.get(0).style;
expect(containerStyle).to.have.property('opacity', '1');


 类似资料:
  • 问题内容: react:16.3.0-alpha.1 jest: “22.3.0” enzyme: 3.3.0 typescript: 2.7.1 码: 测试: 错误: 问题答案: 解: 1:使用异步/等待语法。 2:使用安装座(不浅)。 3:等待异步组件生命周期。 例如:

  • 好的,我有点困惑于如何使用enzyme/jest测试我的组件的功能。仍在学习如何测试我的组件——我可以编写简单的测试,但现在我需要让它们更复杂。 我想知道测试组件函数是否被正确调用以及它们是否按预期更新状态道具的最佳方法。我发现很棘手的是,我的函数和状态都存在于我的组件的道具中。 如果我需要使用间谍,我想最好知道如何使用笑话,但是如果像西农或贾斯敏这样的特工更适合这份工作,我愿意接受(只要让我知道

  • 我正在研究一个包装组件,以便在React中顺利加载图像。我用酶和摩卡、茶和西农一起对我的成分进行单元测试。在这里的测试中,我试图测试: > < li> 当图像加载时,组件的状态会更新 调用了组件上的 实例方法 我发现状态的更新既没有被酶反映出来,也没有更新间谍的调用计数。这是测试的相应代码: 要查看完整代码以获得更好的上下文,请执行以下操作: > 这里的来源 这里的测试

  • 问题内容: 我有一个React组件(为了演示该问题,对此进行了简化): 现在,我要测试提供的值的调用。 为此,我想创建一个代替组件方法的笑话模拟函数。 到目前为止,这是我的测试用例: 但是我在控制台中得到的只是: 语法错误 所以我的问题是,如何正确地用酶模拟组分方法? 问题答案: 可以通过以下方式模拟该方法: 您还需要在被测组件的包装器上调用.update,以便正确注册模拟功能。 语法错误来自错误

  • 问题内容: 我正在遵循此教程:http : //reactkungfu.com/2015/07/approaches-to-testing- react-components-an-overview/ 尝试学习“浅渲染”的工作原理。 我有一个更高阶的组件: 和一个组件: 和一个测试: 该变量保存 在本教程中,测试如下: 就我而言,如果我登录,它是: 所以我像这样更改了测试: 现在它给了我这个错误:

  • 问题内容: 我想测试以下使用api的类。 快速搜索没有发现任何执行此操作的示例。有人成功吗?我将如何嘲笑裁判? 理想情况下,我想使用。 更新资料 所以我可以使用回调引用进行测试,如下所示 然后测试类似 问题答案: 没有特定的例程可以测试参考。引用只是带有键的对象。 如果它是在早期访问的,则需要禁用生命周期挂钩进行测试。应该测试组件最初是否具有引用,然后可以对其进行模拟 由于ref作为prop传递给