完成测试后如何清除Redux状态

时间:2018-07-13 07:55:12

标签: react-native ui-automation detox

我刚刚尝试了Detox进行e2e测试UI自动化。这个图书馆真的很好。我只想问一下完成测试套件后是否有任何方法可以清除redux状态。就我而言,我想清除购物车

这是我的代码:

import CartActions, {reducer, INITIAL_STATE} from '../../App/Redux/CartRedux'

describe('Add menu from home screen and do checkout', () => {
  it ('should navigate to meal detail screen after tapping first meal', async () => {
    await waitFor(element(by.id('MealListSlider'))).toBeVisible().withTimeout(7500)
    await element(by.id('homeMenu_0')).tap()
    await expect(element(by.id('MealDetailScreen'))).toBeVisible()
  })

  it ('should show shopping cart button after add item to cart', async () => {
    await element(by.id('addToCart_')).tap()
    await expect(element(by.id('shoppingCartButtonOnMealDetail'))).toBeVisible()
  })

  it ('should navigate to checkout screen', async () => {
    await element(by.id('shoppingCartButtonOnMealDetail')).tap()
    await expect(element(by.id('SingleOrderCheckoutScreen'))).toBeVisible()
  })

  afterAll(() => {
    reducer(INITIAL_STATE, CartActions.userEmptyingCart())
  })
})

我正在使用Jest作为我的测试跑步者。如果我做错了,请帮助我。谢谢

排毒:8.0.0 React Native:0.47.2 设备:iOS Xcode:9 macOS:High Sierra

1 个答案:

答案 0 :(得分:1)

您可能对Detox在哪个上下文中运行感到困惑。排毒测试的代码在计算机和操作系统的上下文中运行(就像您运行的任何Node.js应用程序一样),但是您的应用程序代码在设备/模拟器/模拟器上运行。

最重要的是,您不能简单地从$sql ="select * from table1 group by destination"; $result=mysql_query($sql) or die(mysql_error()); while($myrow=MySQL_fetch_array($result,MYSQL_ASSOC)) { extract($myrow); $invno=$myrow[2]; sql2 = "select total from table2 where invoice_no like '%$invno%'"; $result2 = mysqli_query($conn, $sql); while ($row=mysqli_fetch_row($result2)) { $value = $row[0]; } if (destination == "Washington") { $wstotal += $value;} else if (destination == "Hawaii") { $wstotal += $value;} else if (destination == "Budapest") { $wstotal += $value;} } 访问应用程序代码。

通常,您会使用device API种方法,例如detoxlaunchApp

P。 S.随机建议。如果您确实想与Detox的Redux reducer混为一谈,请考虑随应用程序的开发版本一起提供某种“开发人员模式屏幕”,从Detox访问它,然后点击为特定用例创建的按钮。打开您的想象力和创造力-也许一个特定的键盘监听器就足够了(而不是一个额外的屏幕)。但是无论如何,也许坚持使用reloadReactNative-通常就足够了。