在我的新React Native应用程序中,我想添加一些Jest测试。
一个组件渲染背景图像,该图像直接位于项目的assets
文件夹中。
现在,我遇到了如何测试这个图像是否确实是从这个路径获取的,因此是否存在于组件中,以及是否正确呈现。
我尝试使用@testing-library/jest-native
中的toHaveStyle
和一个容器,返回错误toHaveStyle
不是函数。然后我尝试使用queryByTestId
,同样的错误。当我使用expect(getByTestId('background').toBeInTheDocument);
时,我觉得这是无用的,因为它只检查具有此testId的元素是否存在,而不检查图像源。
请问,我该怎么测试这个呢?测试一个图像源到底有没有意义?
下面是我的代码:
1.)应测试的组件(Background
):
const Background: React.FC<Props> = () => {
const image = require('../../../../assets/images/image.jpg');
return (
<View>
<ImageBackground testID="background" source={image} style={styles.image}></ImageBackground>
</View>
);
};
2.)测试:
import React from 'react';
import {render, container} from 'react-native-testing-library';
import {toHaveStyle} from '@testing-library/jest-native';
import '@testing-library/jest-native/extend-expect';
import Background from '../Background';
describe('Background', () => {
test('renders Background image', () => {
const {getByTestId} = render(<Background></Background>);
expect(getByTestId('background').toBeInTheDocument);
/* const container = render(<Background background={background}></Background>);
expect(container).toHaveStyle(
`background-image: url('../../../../assets/images/image.jpg')`,
); */
/* expect(getByTestId('background')).toHaveStyle(
`background-image: url('../../../../assets/images/image.jpg')`,
); */
});
});
5条答案
按热度按时间vqlkdk9b1#
如果您使用的是
@testing-library/react
而不是@testing-library/react-native
,并且图像上有alt
属性,则可以避免使用getByDataTestId
,而使用getByAltText
。文件。
不幸的是,看起来React Native Testing Library does not include
getByAltText
.(谢谢你,@P.罗兰!)dbf7pr2w2#
这有点难说,因为我们看不到
<ImageBackground>
组件或它的功能...但如果它像<img>
组件一样工作,我们可以做类似这样的事情。通过图像组件的role / alt text / data-testid使用图像组件上的选择器:
然后查找该组件的属性:
moiiocjp3#
当我使用
getByAltText
和getByDataTestId
时,我得到了is not a function
错误。所以对我有效的方法是:
我使用
@testing-library/react-native": "^7.1.0
rt4zxlrg4#
我今天遇到了这个问题,发现如果您的URI是一个URL而不是必需的文件,那么将源代码
uri
缝合到testID
上可以很好地工作。测试
khbbv19g5#
我认为您正在寻找: