开玩笑的快照测试会忽略子样式

时间:2019-01-20 10:57:17

标签: javascript reactjs react-native testing jestjs

我正在尝试为非常非常简单的本机组件编写一个简单的快照测试。但是,Jest使用的快照不包含组件单个孩子的任何样式或内容信息。

该组件是本机库中的按钮,其中带有图标。来源:

import React, { Component } from 'react';

import { Button, Icon } from 'native-base';
export default class AddButton extends Component {
  render() {
    return (
      <Button transparent
            style={{
              alignSelf: "center",
              paddingTop: 0,
              paddingBottom: 0}}>
        <Icon
            style={{fontSize: 36}}
            name="ios-add-circle-outline" />
    </Button>);
  }
}

这是它的测试:

import React from 'react';
import AddButton from './AddButton.js';
import renderer from 'react-test-renderer';

it('renders correctly', () => {
  const tree = renderer
    .create(<AddButton/>)
    .toJSON();
  console.log(tree);
  expect(tree).toMatchSnapshot();
});

快照如下:

<View
  // ... lots of properties
  style={
    Object {
      // ... lots of styles
    }
  }
>
  // But no info about the Text component below!
  <Text />
</View>

“文本”组件的全部内容是准系统<Text />。它应该包含fontSize样式,并且应该包含图标文字!

如何为包含子元素的所有样式和文本的组件创建快照?

1 个答案:

答案 0 :(得分:0)

这是由Expo的图标渲染逻辑引起的。图标字体将在后台加载,并且如果在字体完成加载之前呈现图标组件,则该组件将简单地呈现为<Text />。参见https://github.com/expo/vector-icons/blob/master/createIconSet.js#L39

我打开了https://github.com/expo/expo/issues/3566,将对此的注释添加到了文档中。