标签: widget-test-flutter

错误“pumpAndSettle 超时”可能是由于 Riverpod 造成的

我被小部件测试困住了,我可以使用一些帮助
来重现该行为,请运行下面的代码示例

\n
import \'package:flutter/material.dart\';\nimport \'package:hooks_riverpod/hooks_riverpod.dart\';\nimport \'home_page.dart\';\n\nvoid main() => runApp(\n      const ProviderScope(\n        child: MaterialApp(\n          home: Material(\n            child: MyHomePage(),\n          ),\n        ),\n      ),\n    );\n
Run Code Online (Sandbox Code Playgroud)\n
import \'dart:math\';\nimport \'package:flutter/material.dart\';\nimport \'package:flutter_hooks/flutter_hooks.dart\';\nimport \'package:hooks_riverpod/hooks_riverpod.dart\';\n\nextension RoundX on double {\n  double roundToPrecision(int n) {\n    final f = pow(10, n);\n    return (this * f).round() / f;\n  }\n}\n\nfinal tasksPod = Provider<List<Future<void> Function()>>(\n  (ref) => [\n    for (var i = 0; i < 10; ++i)\n      () async {\n        await Future.delayed(kThemeAnimationDuration);\n      }\n  ],\n);\n\nfinal progressPod = Provider.autoDispose<ValueNotifier<double>>((ref) {\n  final notifier = ValueNotifier<double>(0);\n …
Run Code Online (Sandbox Code Playgroud)

dart flutter widget-test-flutter flutter-hooks riverpod

14
推荐指数
2
解决办法
2万
查看次数

小部件测试中的 Tap() 在颤动中显示警告

await widgetTester.tap(find.byType(ElevatedButton));
Run Code Online (Sandbox Code Playgroud)

显示警告:也许该小部件实际上不在屏幕上,或者另一个小部件遮挡了它,或者该小部件无法接收指针事件。

flutter widget-test-flutter

9
推荐指数
1
解决办法
6279
查看次数

使用 HttpClient 进行 Flutter Widget 测试

我正在尝试为屏幕而不是主应用程序编写小部件测试。这是我第一次编写小部件测试,我找不到该问题的正确解决方案。我不知道如何为此编写适当的测试。我尝试编写一个简单的小部件测试,但最终给出了如下错误“警告:此套件中至少有一个测试创建了一个 HttpClient。当运行使用 TestWidgetsFlutterBinding 的测试套件时,所有 HTTP 请求都将返回状态代码 400,并且实际上不会发出任何网络请求。任何期望真实网络连接和状态代码的测试都将失败。要测试需要 HttpClient 的代码,请向被测代码提供您自己的 HttpClient 实现,以便您的测试能够一致地提供可测试的对被测代码的响应。” 我刚刚开始学习,请帮助我。注意:我的测试只是编写一个用于查找文本小部件的基本测试。

class BookingDetails extends StatefulWidget {
final booking;
BookingDetails(this.booking);
@override
_BookingDetailsState createState() => _BookingDetailsState();
}

class _BookingDetailsState extends State<BookingDetails>
with AutomaticKeepAliveClientMixin {

Row _buildTeacherInfo(Map<String, dynamic> teacherData) {
return teacherData != null
    ? Row(
        children: <Widget>[
          CircleAvatar(
            radius: 53,
            backgroundColor: MyColors.primary,
            child: CircleAvatar(
              radius: 50.0,
              backgroundImage: teacherData['user']['img_url'] == null ||
                      teacherData['user']['img_url'] == ''
                  ? AssetImage('assets/images/placeholder_avatar.png')
                  : NetworkImage(teacherData['user']['img_url']),
              backgroundColor: Colors.transparent,
            ),
          ),
          SizedBox(width: 20.0),
          Column(
            children: <Widget>[
              Container(
                child: Column(
                  children: …
Run Code Online (Sandbox Code Playgroud)

http dart flutter widget-test-flutter

8
推荐指数
1
解决办法
8687
查看次数

InkWell Tap 的 Flutter 小部件测试失败

我有一个像这样的小部件测试,我可以使用 找到小部件actionKey,但是点击测试失败并且tapped在 后值为 false tester.tap(...),我的测试有什么问题?

testWidgets('some test', (WidgetTester tester) async {
  final UniqueKey actionKey = UniqueKey();
  bool tapped = false;

  await tester.pumpWidget(MaterialApp(
    home: Scaffold(
      body: SlidableListItem(
        child: const ListTile(title: Text('item')),
        actions: <Widget>[
          InkWell(
            key: actionKey,
            child: const Text('action'),
            onTap: () => tapped = true,
          ),
        ],
      ),
    ),
  ));

  await tester.tap(find.byKey(actionKey));
  await tester.pump();

  expect(find.byKey(actionKey), findsOneWidget);
  expect(tapped, isTrue); <- failes
});
Run Code Online (Sandbox Code Playgroud)
The following TestFailure object was thrown running a test:
  Expected: true
  Actual: <false>
Run Code Online (Sandbox Code Playgroud)

flutter widget-test-flutter

7
推荐指数
1
解决办法
2113
查看次数

为什么在像这样分配 Future 函数时,pumpAndSettle 会超时

在我的州立课上,我宣布了一个未来:

\n
Future<void> _testFuture;\n
Run Code Online (Sandbox Code Playgroud)\n

并像这样分配它initState

\n
super.initState();\n\n_testFuture = Future(() async {\n      await Future.value(1); //can be any computation\n    });\n
Run Code Online (Sandbox Code Playgroud)\n

并像这样使用它FutureBuilder

\n
 FutureBuilder(\n              future: _testFuture,\n              builder: (context, snapshot) {\n                if (snapshot.connectionState == ConnectionState.done)\n                  return Text('Hi');\n                else\n                  return Center(\n                    child: CircularProgressIndicator(),\n                  );\n              },\n            ),\n
Run Code Online (Sandbox Code Playgroud)\n

正常运行应用程序时效果很好,flutter run但是当我尝试使用以下方法测试小部件时flutter test test/widget_test.dart

\n
void main() {\n  testWidgets('Testing', (WidgetTester tester) async {\n    // Build our app and trigger a frame.\n    await tester.runAsync(() async {\n      await tester.pumpWidget(MyApp());\n      await …
Run Code Online (Sandbox Code Playgroud)

dart flutter flutter-test widget-test-flutter

7
推荐指数
1
解决办法
4965
查看次数

在 Flutter 测试中查找 CustomScrollView 内的小部件


\n我在尝试测试我的 Flutter 应用程序时遇到错误。我有一个自定义小部件,位于CustomScrollView小部件的底部(第一个视口之外)。在我的测试中,我想验证它是否确实存在。
\n我已经尝试过使用WidgetTester.scrollUntilVisibleas WidgetTester.drag(就像在flutter框架的测试中所做的那样)。此外,我尝试重构我的测试,但这FlutterDriver完全搞乱了其他一切。
\n如何滚动到CustomScrollView测试内部的底部?
\n这个最小的复制显示了包含 的应用程序,该应用CustomScrollView程序具有一个屏幕高度的容器小部件(以便我要查找的小部件不在初始视图中)

\n
void main() {\n  runApp(MyApp());\n}\n\nclass MyApp extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp(\n      home: Scaffold(\n          body: CustomScrollView(\n        slivers: [\n          SliverToBoxAdapter(\n            child: Container(\n              height: MediaQuery.of(context).size.height,\n            ),\n          ),\n          MyWidget(),\n        ],\n      )),\n    );\n  }\n}\n\nclass MyWidget extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return SliverToBoxAdapter(\n      child: Container(\n        height: 100,\n        width: 100,\n      ),\n    );\n  }\n}\n\n
Run Code Online (Sandbox Code Playgroud)\n

这是我最初编写的用于查找小部件的测试,当然失败了。

\n
void main() {\n  testWidgets('main …
Run Code Online (Sandbox Code Playgroud)

flutter flutter-test customscrollview widget-test-flutter flutter-integration-test

7
推荐指数
1
解决办法
2270
查看次数

测试时如何检查小部件是否可见

就我而言,当我使用 时ExpansionPanelList,我需要检查面板内的小部件是否可见。

如果不可见,tester.tap(find.text('More Info'))将抛出异常:

Warning: A call to tap() with finder "exactly one widget with text "More Info" (ignoring offstage widgets): Text("More Info", dependencies: [MediaQuery, DefaultTextStyle])" derived an Offset (Offset(400.0, 641.8)) that would not hit test on the specified widget. Maybe the widget is actually off-screen, or another widget is obscuring it, or the widget cannot receive pointer events. Indeed, Offset(400.0, 641.8) is outside the bounds of the root of the render tree, Size(800.0, 600.0). The …
Run Code Online (Sandbox Code Playgroud)

testing flutter widget-test-flutter

7
推荐指数
1
解决办法
6747
查看次数

如何在 Flutter 测试中找到“FlatButton.icon”?

在我的应用程序中,我使用FlatButton.iconFlutter docs)创建了一个按钮。现在我试图在测试期间找到按钮。

我试过了

find.byType(MaterialButton); // -> zero widgets
find.byType(FlatButton); // -> zero widget
Run Code Online (Sandbox Code Playgroud)

奇怪的是我可以找到按钮的文字

find.text('my button text');
Run Code Online (Sandbox Code Playgroud)

我还可以找到按钮的图标

find.byType('Icon');
Run Code Online (Sandbox Code Playgroud)

我不确定我应该搜索什么才能找到按钮。

flutter widget-test-flutter

6
推荐指数
2
解决办法
1040
查看次数

6
推荐指数
1
解决办法
590
查看次数

模拟颤振测试中的悬停

我正在开发一个 flutter web 项目,我有一个小部件,我想编写测试。该小部件正在使用 ,MouseRegion当用户将其悬停或未悬停时,该小部件会执行一些操作。

举个例子:


class MyWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  bool isHovered = false;
  @override
  Widget build(BuildContext context) {
    return MouseRegion(
      onExit: (_) {
        setState(() {
          isHovered = false;
        });
      },
      onEnter: (_) {
        setState(() {
          isHovered = true;
        });
      },
      child: Container(
        color: isHovered ? Colors.blue : Colors.red,
        height: 50,
        width: 50,
      )
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

我可以编写一个小部件测试来测试我的容器是红色的:

testWidgets('MyWidget should be red by default', (WidgetTester tester) …
Run Code Online (Sandbox Code Playgroud)

hover dart flutter flutter-test widget-test-flutter

5
推荐指数
1
解决办法
1457
查看次数