反応ネイティブコンポーネントをテストするためにreact-native-testing-library
を使用しています。私はコンポーネントを持っています(この投稿の目的のために、それは過度に簡略化されています):
export const ComponentUnderTest = () => {
useEffect(() => {
__make_api_call_here_then_update_state__
}, [])
return (
<View>
__content__goes__here
</View>
)
}
これが私の(簡略化された)component.spec.tsx
です。
import { render, act } from 'react-native-testing-library';
import { ComponentUnderTest } from './componentundertest.tsx';
test('it updates content on successful call', () => {
let root;
act(() => {
root = render(<ComponentUnderTest />); // this fails with below error message
});
expect(...);
})
このコードを実行すると、次のエラーが発生します:Can't access .root on unmounted test renderer
このエラーメッセージの意味は今でもわかりません。 react-native-testing-library
のテスト方法については、act and useEffect
のドキュメントに従いました。
どんな助けでも大歓迎です。ありがとう
root = render(<ComponentUnderTest />);
する必要があります
root = create(<ComponentUnderTest />);
----完全なコードスニペット。上記の変更後に私のために働く
import React, { useState, useEffect } from 'react'
import { Text, View } from 'react-native'
import { render, act } from 'react-native-testing-library'
import { create } from 'react-test-renderer'
export const ComponentUnderTest = () => {
useEffect(() => {}, [])
return (
<View>
<Text>Hello</Text>
</View>
)
}
test('it updates content on successful call', () => {
let root
act(() => {
root = create(<ComponentUnderTest />)
})
})
次の手順で私のケースは解決しました:
React
とreact-test-renderer
のバージョンを16.9以降にアップグレードして、async
内のact
関数をサポートします(両方のパッケージは、私の知る限り同じバージョンである必要があります)
@helloworldが提案したように、react-native-testing-library
のrender
をreact-test-renderer
のcreate
に置き換えます(ありがとうございます、助かります)
テスト関数をasync
にし、act
の前にawait
を付け、それにasync
関数を渡す
最終結果は次のようになります。
test('it updates content on successful call', async () => {
let root
await act(async () => {
root = create(<ComponentUnderTest />)
})
})