单独测试小部件

问题描述

我正在学习为我的 Flutter 应用编写 Widget 测试,但在这次测试中迷失了方向。我有一个非常简单的 StatelessWidget,我想检查一下:

  • 关闭 AppBar 的标题
  • 动作图标
  • 正文
import 'package:flutter/material.dart';

class ShowsPage extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      key: Key("ShowsPage"),appBar: AppBar(
        title: Text("Shows"),actions: <Widget>[
          IconButton(
              icon: const Icon(Icons.filter),onPressed: null)
        ],),body: const Center(
        child: Text(
          "This is the Shows page",);
  }
}

这个 Widget 被 Main 类使用

import 'package:flutter/material.dart';
import 'package:showring_helper/mainPages/showsPage.dart';

void main() {
  runApp(Main());
}

class Main extends StatelessWidget {
  // This widget is the root of your application.

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter app',theme: ThemeData(
        primarySwatch: Colors.brown,visualDensity: VisualDensity.adaptivePlatformDensity,home: ShowsPage(),);
  }
}

我的想法是我可以在没有 Main 类的情况下测试 ShowPage,但我得到这个工作的唯一方法是使用这个测试 tester.pumpWidget(Main())

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:showring_helper/mainPages/main.dart';

void main() {
  group('Shows Page',()
  {
    testWidgets('Showspage should have AppBar title Shows',(
        WidgetTester tester) async {
      await tester.pumpWidget(Main());
      var scaffold = find.byType(Scaffold).evaluate().first.widget as Scaffold;
      var appbar = scaffold.appBar as AppBar;
      var title = appbar.title as Text;
      expect(title.data,"Shows");
    });

    testWidgets('ShowPage should have filter icon in AppBar',(
        WidgetTester tester) async {
      await tester.pumpWidget(Main());
      expect(find.byIcon(Icons.filter),findsOneWidget);
    });

    testWidgets('ShowPage should have body child with text',(
        WidgetTester tester) async {
      await tester.pumpWidget(Main());
      var scaffold = find.byType(Scaffold).evaluate().first.widget as Scaffold;
      var body = scaffold.body as Center;
      var child = body.child as Text;
      expect(child.data,"This is the Shows page");
    });
  });
}

有什么方法可以使用 tester.pumpWidget(ShowsPage())

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:showring_helper/mainPages/showsPage.dart';

void main() {
  group('Shows Page',(
        WidgetTester tester) async {
      await tester.pumpWidget(ShowsPage());
      var scaffold = find.byType(Scaffold).evaluate().first.widget as Scaffold;
      var appbar = scaffold.appBar as AppBar;
      var title = appbar.title as Text;
      expect(title.data,"Shows");
    });

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)