問題タブ [detox]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
react-native - Detox Testing で redux ストアの初期状態を読み込む
問題
非常に複雑なアプリケーションがあり、各テスト ケースでプロセス全体を実行して特定の画面に移動してテストする必要はありません。代わりに、状態が redux ストアに保存されている特定の画面にジャンプしたいだけです。
私が試し
たのは、特定の画面をロードする複数の初期状態を作成して直接テストできるようにし、デトックス テストの実行ごとに異なる mocha.opts をロードしてテスト ケースのこの部分を選択し、「react-native-config」を使用したことです。実行ごとに異なる状態をロードできるため、たとえば画面をロードするには、次のようにします。
- 現在テストしている画面のすべての詳細を含む redux ストアの initialState を作成します。
- -f フラグを指定して、このテスト ケースのみを実行する mocha.opts を作成します。
- 選択した ENVFILE に従ってどの初期状態をロードするかをストアに伝える .env.test.screenX ファイルを作成します。
- detox の各画面に異なる構成を作成して、detox CLI を介して正しい mocha opts をロードできるようにします。
- コマンド ENVFILE=env.test.screenX react-native run-ios を実行するたびに、この構成を使用してプロジェクトがビルドされ、デトックス テスト -c を実行できます。
質問
私の方法は非常に複雑で、各画面でテストを実行するために多くのセットアップとオーバーヘッドが必要になるため、同じ問題が発生したかどうか、どうすれば解決できるか疑問に思っていました。一般に、デトックスで反応するネイティブスレッドをどのように処理できますか?
react-native - デトックス テストで現在アクティブな構成を取得する方法
ドキュメントでは、package.json に複数のデトックス構成を追加する方法が説明されています。
を使用してテストを実行する場合、テスト内のパラメータdetox --configuration someconfig
を見つけるにはどうすればよいですか?someconfig
someTestSuite.spec.js
ユースケース: テストで、構成に基づいてユーザー名とパスワードのテキスト入力を設定したい。
ありがとう。
detox - toBeVisible() 期待値と tap() アクションを使用して、部分的に表示されているボタンの動作をデトックスします
ScrollView とボタンが一番下にあり、部分的に表示されている画面があります。つまり、ボタンの上部が画面にありますが、下にスクロールしない限り、タイトルは表示されません。
expect(element(by.id(BUTTON_IN_THE_BOTTOM))).toBeVisible()
=>マッチャーは失敗します。
element(by.id(BUTTON_IN_THE_BOTTOM)).tap()
=> よし、ボタンをタップ。
これは矛盾しているように思われ、フレームワークはそのような動作において一貫しているべきだと思います。これは予想される動作ですか?
デトックス7.3.2を使用していました
testing - アプリの状態: 未定義で終わりのない待機テスト
どういうわけか、e2e デトックス テストを実行するとき、同期が完了するのを常に待ちます (同期を無効にして手動で待機すると、動作します)。
すべてのアニメーションを削除しようとしましたが、どういうわけかまだ実行中のものがあります。
ログには次のように表示されます。
detox info Sync App State: undefined
detox info Sync Dispatch Queue: com.apple.main-thread
detox verb ws send: {"type":"currentStatus","params":{},"messageId":21}
detox verb ws onMessage: {"type":"currentStatusResult","messageId":21,"params":{"state":"busy","resources":[{"name":"App State","info":{"elements":["<UIViewController: 0x7fdc1351bf50>"],"appState":"Waiting for window's root view controller's view to appear."}},{"name":"Dispatch Queue","info":{"queue":"<OS_dispatch_queue_main: com.apple.main-thread[0x112beadc0] = { xref = -2147483648, ref = -2147483648, sref = 1, target = com.apple.root.default-qos.overcommit[0x112bec300], width = 0x1, state = 0x001ffe9e00000400, dirty, max qos 6, in-flight = 0, thread = 0x403 }>","prettyPrint":"com.apple.main-thread"}}],"messageId":21}}
detox verb ws
detox info Sync App State: undefined
detox info Sync Dispatch Queue: com.apple.main-thread
detox verb ws send: {"type":"currentStatus","params":{},"messageId":22}
detox verb ws onMessage: {"type":"currentStatusResult","messageId":22,"params":{"state":"busy","resources":[{"name":"App State","info":{"elements":["<UIViewController: 0x7fdc1351bf50>"],"appState":"Waiting for window's root view controller's view to appear."}},{"name":"Dispatch Queue","info":{"queue":"<OS_dispatch_queue_main: com.apple.main-thread[0x112beadc0] = { xref = -2147483648, ref = -2147483648, sref = 1, target = com.apple.root.default-qos.overcommit[0x112bec300], width = 0x1, state = 0x001ffe9e00000400, dirty, max qos 6, in-flight = 0, thread = 0x403 }>","prettyPrint":"com.apple.main-thread"}}],"messageId":22}}
この問題が非常に高く評価されている場合のヘルプ
[2018/04/18 更新]:
明確にするために:
アプリ コンポーネントのレンダリング機能は次のようになります。
テストは、prop を変更することでオンボーディングからログイン画面に移動しisOnboardingVisible
、要素が表示されるのを待ってログイン画面でスタックします (画面にはっきりと表示されます)。
オンボーディング画面を削除し、ログイン画面でテストを直接開始すると、テストは機能します。
コメントで要求されたような AppDelegate.m は次のとおりです。