gpt4 book ai didi

javascript - Enzyme 的 shallow().text() 和 React Native 没有像我预期的那样工作

转载 作者:数据小太阳 更新时间:2023-10-29 04:31:59 26 4
gpt4 key购买 nike

我试图通过 enzyme 对 React Native 测试有一些基本的了解。和 react-native-mock .

下面不包括:用于 mocha 的自定义编译器,以获得 babel 的优点。

我的代码如下:

Block.jsx :

import React from 'react';
import {View} from 'react-native';

export default ({title, ui}) => (
<View>
Title: {title}
</View>
);

Block.test.js

import { shallow } from 'enzyme';
import { expect } from 'chai';
import {Block} from '../';
import React from 'react';

describe('<Block /> with props: title', () => {

it('should have correct props', () => {
expect(
shallow(<Block title="Something" />).props()
).to.deep.equal( {title:"Something"} );
});

it('should have correct title', () => {
expect(
shallow(<Block title="Something" />).text()
).to.equal( "Something" );
});

});

测试结果

Mocha 命令:

mocha --compilers js:./test/support/compiler.js --require react-native-mock/mock --recursive **/test/*.test.js --watch

Mocha 测试结果:

  <Block /> with props: title
1) should have correct props
2) should have correct title

2 failing

1) <Block /> with props: title should have correct props <Text />:

AssertionError: expected { Object (children) } to equal { title: 'Something' }
+ expected - actual

{
- "children": [
- "Title: "
- "Something"
- ]
+ "title": "Something"
}

at Context.<anonymous> (components/test/Block.test.js:24:120)

2) <Block /> with props: title should have correct title <Text />:

AssertionError: expected '<View />' to equal 'Something'
+ expected - actual

-<View />
+Something

at Context.<anonymous> (components/test/Block.test.js:28:119)

意外行为

  1. props()似乎获得了正确的值,但格式与 api 描述的不同
  2. text()不渲染节点 textContent ,而是字符串化标签“<View />

替代方案:props().children

给定组件:

import React from 'react';
import {View, Text} from 'react-native';

export default ({title, ui}) => (
<View>
<Text> The title...</Text>
{title}
</View>
);

props().children是数组 [<Text component instance>, "Something"]

所以下面的测试通过了:

  it('should have correct props', () => {
expect(
shallow(<Block title="Something" />).props().children
).to.contain( "Something" );
});

问题

为什么 Enzyme API 的行为与文档中描述的不同?

具体看文档shallow(<Block title="Something" />).text()应该等于某物,例如:The title...Something

我做错了什么,还是我正在使用的技术之一?

编辑 1:其他问题

html() , render() , update()似乎也不适用于我的设置

编辑:React native 仅适用于 shallow at the moment

最佳答案

方案一:textContent

的方案

来自 Enzyme 示例应用:

const title = "Blah";
const wrapper = shallow(<Block title={title} />);
expect(wrapper.length).to.equal(1);
expect(wrapper.contains(<Text>{title}</Text>)).to.equal(true);

解决方案 2:更语义化

好的 Alternative: props().children 的更多语义版本在下面。这Github discussion也有帮助。

Block.js:

import React from 'react';
import {View, Text} from 'react-native';

export default ({title, ui}) => (
<View>
<Text data={title}>{title}</Text>
</View>
);

Block.test.js:

  it('should have correct props', () => {
const title = title;
expect(
shallow(<Block title={title} />)
.find('Text') // Use selector to get certain children
.first() // Get the first child
.props() // Get its props
.data
).to.equal(title)
});

关于javascript - Enzyme 的 shallow().text() 和 React Native 没有像我预期的那样工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37704979/

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