标签: flutter-integration-test

如何在 Flutter 小部件测试中组合两个 Finder?

使用package:flutter_test,我可以创建一个查找器,通过键查找小部件:

expect(find.byKey(const ValueKey('counter')), findsOneWidget);
Run Code Online (Sandbox Code Playgroud)

或通过文字:

expect(find.text('0'), findsOneWidget);
Run Code Online (Sandbox Code Playgroud)

我还可以找到从此小部件衍生的小部件:

expect(
  find.descendant(
    of: find.byKey(const ValueKey('counter')),
    matching: find.text('0'),
  ),
  findsNothing,
);
Run Code Online (Sandbox Code Playgroud)

或者祖先:

expect(
  find.ancestor(
    of: find.text('0'),
    matching: find.byKey(const ValueKey('counter')),
  ),
  findsNothing,
);
Run Code Online (Sandbox Code Playgroud)

但是我如何组合这些查找器来验证是否存在带有“计数器”键且文本为“0”的小部件?例如:

Text(
  '$_counter',
  key: const Key('counter'),
  style: Theme.of(context).textTheme.headline4,
),
Run Code Online (Sandbox Code Playgroud)

flutter flutter-integration-test

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

如何等待小部件在颤振集成测试中加载?

颤动集成测试中有什么方法可以保持等待,直到小部件完全加载吗?

就像在启动画面完成后等待主页加载一样?

flutter flutter-test flutter-integration-test

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

Flutter Integration_test - 在 VS Code 中添加 --flavor 参数

我有一套针对 Flutter 应用程序的集成测试。我想使用 VS Code 测试选项卡运行它们,以便我可以轻松查看有关哪些测试通过/失败的信息等。

VS Code 测试视图

在我们实现flavor之前,这工作得很好。现在,口味已在 launch.json 中定义,运行测试需要 --flavor 参数,但我似乎无法在 UI 中设置它。

如果我尝试使用 VS Code 中的“测试”选项卡在 iOS 上运行它们,则会收到以下错误:

The Xcode project defines schemes: dev, prod, qa Exception: You must specify a --flavor option to select one of the available schemes.

我可以运行flutter test integration_test --flavor dev,但终端充满了日志,很难找出哪些测试失败以及原因。

visual-studio-code flutter flutter-test flutter-integration-test

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

如何在小部件层次结构中找到多个相同类型的小部件?

我正在为我的一个 flutter-web 应用程序开发一些集成测试。我想考虑从上到下的方法,在下面的小部件层次结构树中专门定位容器(宽度:50,高度:50)。ParentWidget --> 行 --> 文本、SizedBox、行 --> Container()、Container(宽度:50,高度:50)、Container()。 注:不带按键方法

我尝试使用 ParentWidget --> Row --> Row --> with index 的后代进行定位,尝试选择第二个容器,但这不起作用,它失败并出现错误"Bad state: No element"

import 'package:flutter/material.dart';

class ParentWidget extends StatelessWidget {
  const ParentWidget({Key? key});

  @override
  Widget build(BuildContext context) {
    return Row(
      crossAxisAlignment: CrossAxisAlignment.center,
      children: [
        Text("Hello World..!!"),
        SizedBox(
          width: 20,
        ),
        Row(
          crossAxisAlignment: CrossAxisAlignment.end,
          children: [
            Container(
              width: 20,
              height: 20,
              color: Colors.red,
            ),
            Container(
              width: 50,
              height: 50,
              color: Colors.red,
            ),
            Container(
              width: 20,
              height: 20, …
Run Code Online (Sandbox Code Playgroud)

dart flutter flutter-web flutter-integration-test

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

flutter 中的单个 app.main() ;如何使用方法运行所有测试?

我正在尝试为我的 Flutter 应用程序编写集成测试,我不想为每个测试一遍又一遍地调用 app.main() 方法,在 flutter 中调用单个 app.main() ;如何使用方法运行所有测试?

 group('Test', () {
    testWidgets('Test 1', (tester) async {
      app.main();
      
    }
    testWidgets('Test 2', (tester) async {
      app.main();
      
    }
}
Run Code Online (Sandbox Code Playgroud)

testing flutter flutter-integration-test

5
推荐指数
0
解决办法
322
查看次数

有没有办法在集成测试期间捕获 print() 语句

在集成测试期间是否有任何方法可以监视或保存或读取 print() 语句打印到控制台的任何内容。我正在用于integration_test测试。

dart flutter flutter-test flutter-integration-test

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

Flutter:如何在 gradle 脚本中使用 dart-define 变量

在为 flutter 应用程序创建集成测试时,如何dart-define通过 gradle 脚本传递变量。

从Flutter文档来看,为了构建一个仪器测试apk(然后将其上传到Firebase测试实验室并进行测试),我们需要直接使用gradlew这样的命令:

pushd android
flutter build apk
./gradlew app:assembleAndroidTest
./gradlew app:assembleDebug -Ptarget=integration_test/<name>_test.dart
popd

Run Code Online (Sandbox Code Playgroud)

这里没有指定如何将--dart-define我们正在使用的标志内容从 flutter 端传递flutter rungradlew命令。

flutter flutter-integration-test

3
推荐指数
1
解决办法
1929
查看次数

Flutter 集成测试的热重载?

我已经按照此处的定义在我的项目上设置了 Flutter 集成测试:https : //flutter.dev/docs/testing/integration-tests

我使用了以下 devDepencendies:

integration_test: ^1.0.0
flutter_test:
  sdk: flutter
flutter_driver:
  sdk: flutter
Run Code Online (Sandbox Code Playgroud)

测试驱动程序只是来自项目页面的 C&P:

import 'package:integration_test/integration_test_driver.dart';

Future<void> main() => integrationDriver();
Run Code Online (Sandbox Code Playgroud)

最终测试:

void main() {
    IntegrationTestWidgetsFlutterBinding.ensureInitialized();

    testWidgets('CPCSA-TC-016: Vehicle Card with no alert',
    (WidgetTester tester) async {
        app.main();
        // Execute test code. 
    });
}
Run Code Online (Sandbox Code Playgroud)

最后我运行我的测试

flutter drive --driver=test_driver/integration_test.dart --target=integration_test/test.dart

这基本上没问题,但它在每次执行时都会编译,这非常耗时。我是否有机会运行集成测试并拥有与常规开发相同的热重载功能?如何实现这一目标?

或者还有其他解决方法吗?我正在考虑首先将测试代码编写为单元/小部件测试,然后在执行正确后将其移植到集成测试中。

integration-testing flutter hot-reload flutterdriver flutter-integration-test

2
推荐指数
1
解决办法
407
查看次数

允许在 flutter 新集成测试中运行整个测试文件夹 - 就像普通的单元测试一样

为每个屏幕都有一个单独的集成测试文件,我想使用 \xe2\x80\x9cfluttertests\xe2\x80\x9d 等单个命令运行所有集成测试。我查看了文档,但找不到任何方法来做到这一点。这也会导致 firebase 测试实验室 apk 出现问题。要创建 Android 测试 apk,我只能指定单个测试文件路径来创建 apk。

\n
// flutter build generates files in android/ for building the app\nflutter build apk\n./gradlew app:assembleAndroidTest\n./gradlew app:assembleDebug -Ptarget=integration_test/whattodo_tests.dart\n
Run Code Online (Sandbox Code Playgroud)\n

目前,我找到了两种解决方法。

\n
    \n
  1. 我\xe2\x80\x99已将所有测试移动到具有组测试的单个 dart 文件中。\n但是此解决方法不能很好地扩展。对于 5-10 测试,\xe2\x80\x99s 工作正常。但假设我们有 50-75 个测试,那么在单个文件中导航和理解测试将会很混乱。
  2. \n
  3. 创建一个脚本来一一运行所有测试。这可能适用于我们自己的 CI 管道,但不适用于 firebase 测试实验室。
  4. \n
\n

有谁能够解决这个问题或有更好的解决方案吗?

\n

testing integration-testing flutter firebase-test-lab flutter-integration-test

2
推荐指数
1
解决办法
2171
查看次数

集成测试“enterText”方法不适用于配置文件或发布模式

测试在调试模式下通过,但在配置文件或发布模式下未通过。enterText即使输入具有焦点,它在调用时也不会输入文本。在调试模式下,它可以毫无问题地输入文本。

testing integration-testing dart flutter flutter-integration-test

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