【问题标题】:Flutter: testing widgetsFlutter:测试小部件
【发布时间】:2019-02-25 22:48:12
【问题描述】:

我要测试的是: 用户点击一个按钮,小吃栏会显示五秒钟。

这是带有钥匙的脚手架:

final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>(debugLabel: "scaffoldState");

...

builder: (context, viewModel) => Scaffold(
              key: _scaffoldKey,

然后是按钮和snackBar的代码:

child: FlatButton(key: Key('loginButton'), onPressed: () { 
 validate();

...

  validate() {
    // FormState object can be used to save, reset, and validate
    // every FormField that is a descendant of the associated Form.

    final FormState form = _formKey.currentState;

    if (form.validate()) {
      form.save();
      form.reset();

      //implementation of the snackBar:
      _scaffoldKey.currentState.showSnackBar(new SnackBar(
        duration: new Duration(seconds: 5)

...

我正在尝试以这种方式测试这种行为(我也在使用 Flutter redux):

void main(){

  final store = Store<AppState>(reducer, initialState: AppState.initialState());
  testWidgets("MaterialApp local", (WidgetTester tester) async{
    await tester.pumpWidget(new StoreProvider(
        store: store,
        child: MaterialApp(
          home: LoginView(),
        )));
    await tester.pumpAndSettle();
    await tester.press(find.byKey(Key("loginButton")));
    expect();

我不知道要在里面放什么。我试图使用 find.ByKey(Key)) 获取 GlobalKey 并搜索 debugLabel,但它似乎不起作用。我从 2 天开始就在尝试,但我找不到出路。

【问题讨论】:

    标签: testing dart flutter


    【解决方案1】:

    回答这个问题可能有点晚了,但由于这是在谷歌上输入“Flutter test Snackbar”时的第二个结果,我只给我两分钱:

    其实很简单。不要仅仅因为 Snackbar 仅在底部停留几秒钟就认为 Snackbar 是完全不同的东西。最后,Snackbar 只是另一个 Widget。

    记住这一点,您可以按如下方式对其进行测试:

    testWidgets("MaterialApp local", (WidgetTester tester) async{
      ...
      // Test if the Snackbar appears
      expect(find.byType(SnackBar), findsOneWidget);
      // Test if it contains your text
      expect(find.text('TAPS!'), findsOneWidget);
    });
    
    

    【讨论】:

      【解决方案2】:

      其实我遇到了和你一样的条件,我只是把一个文本作为snackbar的内容。

      为了显示snackbar,我使用的代码是

      scaffoldKey.currentState.showSnackBar(SnackBar(content: Text("TAPS!"),));
                }, "SEE ALL", backgroundColor: Colors.red, textColor: Colors.blue)
      

      我希望找到与我输入的内容相同的文本,并添加 findsOneWidget。

      expect(find.text("TAPS!"), findsOneWidget);

      【讨论】:

        猜你喜欢
        • 2021-05-09
        • 2019-06-13
        • 2019-05-23
        • 2021-02-04
        • 2019-10-31
        • 2018-08-16
        • 2022-06-24
        • 2020-03-21
        • 2021-09-22
        相关资源
        最近更新 更多