标签: flutter-test

FLUTTER:测试 cubit 时,不会发出加载状态,仅发出加载状态

当我正常运行我的应用程序时,我执行 cubit.getWeather('London')并发出weatherLoading状态,然后weatherLoaded状态正确发出。

但是,当我对 cubit 运行 test 来 test 时cubit.getWeather('London'),不会发出 WeatherLoading 状态 - 它会直接跳转到 WeatherLoaded 状态。

为什么会发生这种情况?

状态:

@freezed
abstract class WeatherState with _$WeatherState {
  factory WeatherState.weatherInitial() = WeatherInitial;
  factory WeatherState.weatherLoading() = WeatherLoading;
  factory WeatherState.weatherLoaded(Weather weather) = WeatherLoaded;
  factory WeatherState.weatherError(String message) = WeatherError;
}
Run Code Online (Sandbox Code Playgroud)

肘:

class WeatherCubit extends Cubit<WeatherState> {
  final WeatherRepository _weatherRepository;
  static Weather weather;

  WeatherCubit(this._weatherRepository) : super(WeatherState.weatherInitial());

  Future<void> getWeather(String cityName) async {
    emit(WeatherState.weatherLoading());
    try {
      final weather = await _weatherRepository.fetchWeather(cityName);
      emit(WeatherState.weatherLoaded(weather));
    } on NetworkException {
      emit(WeatherState.weatherError("Network …
Run Code Online (Sandbox Code Playgroud)

dart flutter flutter-test bloc

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

如何在 Dart/Flutter 测试中导入测试 util 文件

我有一些单元测试和一些仅与测试相关的类,例如我的模型的工厂,mockito 的一些扩展等等......

问题是,当我尝试从测试中导入这些文件时,我可以使用相对路径导入它们,假设我有这个实用程序:

  • test/src/test_utils/factories.dart
  • test/src/test_utils/mocks.dart
  • test/src/test_utils/mockito_extensions.dart

我怎么做不到

但是当我尝试从测试中导入它们时,它找不到它们

import 'package:myapp/test_utils/mocks.dart';
Run Code Online (Sandbox Code Playgroud)

或者:

import 'package:myapp/src/test_utils/mocks.dart';
Run Code Online (Sandbox Code Playgroud)

唯一有效的

导入它们的唯一方法是通过相对路径,例如:

import '../../test_utils/mocks.dart';
Run Code Online (Sandbox Code Playgroud)

问题

我很想了解这里发生了什么,为什么我的测试无法在导入中找到测试 utils 类,以及执行此操作的最佳方法是什么。

unit-testing dart flutter flutter-test

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

Flutter 测试模拟 GraphQL 突变结果

我正在尝试使用 GraphQL 为 flutter 应用程序创建小部件测试。我想做的是测试应用程序的行为,该行为取决于用户操作的 GraphQL 突变的结果。

这是该应用程序的一个非常简单的示例:

class FirstScreen extends StatelessWidget {
  @override
  Widget return Container(
    child: Mutation(
      options: myMutationOptions,
      onCompleted: (dynamic result) {
        final bool myBool = result['bool'] as bool;
        if (myBool) {
          Navigator.of(context).push(MaterialPageRoute(builder: (context) => SecondScreen()));
        } else {
          Navigator.of(context).push(MaterialPageRoute(builder: (context) => ThirdScreen()));
        }
      },
      builder: (RunMutation runMutation, QueryResult queryResult) {
       return FlatButton(
         child: Text('Button'),
         onPressed: () async {
           await runMutation(myParameters).networkResult;
         },
       );
      },
    ),
  );
}
Run Code Online (Sandbox Code Playgroud)

我想做的是模拟突变的结果,因此在我的小部件测试中,我可以测试按钮是否重定向到SecondScreenThirdScreen取决于结果myBool

我怎样才能做到这一点 ?

dart graphql flutter flutter-test flutter-graphql

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

在 Azure Devops 管道上运行 Flutter 集成测试以进行 UI 自动化测试

我想在 Azure Devops Pipelines 上使用 flutter 驱动程序运行自动化 UI 测试,并且我正在使用Alois Daniel 的 Flutter Tasks。azure flutter 任务插件目前不支持 flutter 驱动程序。我们正在寻找在运行 flutter 驱动程序测试时启动 Android 和 iOS 模拟器的任务。我们正在 azure devops pipeline yml 文件中运行 macos-latest 的 vm-image。

azure-devops azure-pipelines flutter-test

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

运行测试时出现“未找到:'dart:js'导出'dart:js'显示allowInterop,allowInteropCaptureThis”错误

在我的 Flutter 应用程序中,我有一个名为 的文件web.dart,其中有一个webSaveAs函数可以将文件保存到 web 中的本地计算机上。

\n
@JS()\nlibrary main;\n\nimport \'package:js/js.dart\';\nimport \'package:universal_html/html.dart\';\n\n/// Annotate `webSaveAs` to invoke JavaScript `window.webSaveAs`\n@JS(\'webSaveAs\')\nexternal void webSaveAs(Blob blob, String fileName);\n
Run Code Online (Sandbox Code Playgroud)\n

但是,当我运行任何导入flutter test我使用过webSaveAs功能的小部件的测试(使用命令)时,出现以下错误:

\n
./../../../development/flutter/.pub-cache/hosted/pub.dartlang.org/js-0.6.3-nullsafety.3/lib/js.dart:8:1: Error: Not found: \'dart:js\'\nexport \'dart:js\' show allowInterop, allowInteropCaptureThis;\n^\n
Run Code Online (Sandbox Code Playgroud)\n

我正在使用js: ^0.6.2https://pub.dev/packages/js 这是命令的结果flutter doctor

\n
\xe2\x95\xb0>>> flutter doctor\nDoctor summary (to see all details, run flutter doctor -v):\n[\xe2\x9c\x93] Flutter (Channel beta, 1.25.0-8.3.pre, on macOS 11.2.1 20D74 darwin-x64, locale en-SG)\n[\xe2\x9c\x93] Android toolchain - …
Run Code Online (Sandbox Code Playgroud)

dart flutter flutter-test flutter-web

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

Flutter:Navigator.of(context).pop()返回黑屏

所以我的代码的问题是,一旦我按下提交按钮,我的屏幕就会变黑,然后我无法保存下一个响应。我希望一旦提交我的表单就应该重置以供重复使用,并且应该准备好接受用户的下一个响应,是的,黑屏也应该消失。

import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_core/firebase_core.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MaterialApp(home: MyApp()));
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  TextEditingController problemBox = TextEditingController();

  final db = FirebaseFirestore.instance;

  List _listItem = ["Category 1", "Category 2", "Category 3", "Category 4"];
  List _listItem1 = [
    "Sub Category 1",
    "Sub Category 2",
    "Sub Category 3",
    "Sub Category 4"
  ];
  List _listItem2 = ["CRIS", "ADMINISTRATION", "ZONE", "DEPARTMENT"];

  String dropdownValue; …
Run Code Online (Sandbox Code Playgroud)

forms dart flutter flutter-test flutter-layout

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

Flutter测试错误:NotInitializedError,涉及环境变量(.env)

首先,我确实检查了这一点,但没有结果。\n如何从测试中访问 Flutter 环境变量?

\n
import \'package:flutter/widgets.dart\';\nimport \'package:flutter_test/flutter_test.dart\';\n\nimport \'package:integration_test/integration_test.dart\';\nimport \'package:main.dart\' as app;\n\nimport \'package:mockito/annotations.dart\';\nimport \'package:firebase_auth/firebase_auth.dart\' as firebaseauth;\n\nimport \'package:flutter_dotenv/flutter_dotenv.dart\';\n\nimport \'basic_app_test.mocks.dart\';\n\n\n@GenerateMocks([firebaseauth.FirebaseAuth])\nvoid main() async {\n  TestWidgetsFlutterBinding.ensureInitialized();\n  await DotEnv().load(fileName: ".env");\n\n  group(\'Login Page Tests\', () {\n    testWidgets(\'Empty Login Box\', (WidgetTester tester) async {\n      app.main();\n\n      await tester.pumpAndSettle(Duration(seconds: 3));\n\n      expect(find.byKey(Key(\'loginButton\')), findsOneWidget);\n\n      final Finder loginButton = find.byKey(Key(\'loginButton\'));\n\n      await tester.tap(loginButton);\n\n      await tester.pumpAndSettle();\n\n      expect(\n          find.text(\n              \'Something went wrong. Please check your email and password and try again.\'),\n          findsOneWidget);\n    });\n\n    testWidgets(\'Email Login - Proper Credentials\',\n        (WidgetTester tester) async {\n\n      app.main();\n\n      // Wait …
Run Code Online (Sandbox Code Playgroud)

testing environment-variables flutter flutter-test

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

flutter中如何构建无键发布模式——Flutter调试模式好慢

每当我尝试使用命令测试我的应用程序时,flutter run它都非常缓慢且缓慢,并且我无法确定我的应用程序在发布模式下的性能如何。然而,为了构建 Android 应用程序,release mode我们需要为应用程序创建一个密钥,它不会显示大部分日志文件打印

所以问题是,有没有办法以发布模式格式运行应用程序,但具有调试功能?

flutter flutter-test flutter-build

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

错误:必须先分配不可为 null 的变量“mockBuildContext”,然后才能使用它

我已经在 setUp() 方法中分配了变量,但仍然抛出错误。如果我将 MockBuildContext 设置为可为空,则测试运行成功,但这不是正确的方法。有什么我错过的或建议更好的方法来解决这个问题。

看我的代码:

void main(){

  MockBuildContext mockBuildContext;
  setUpGetIt(testing: true);

  setUp((){
    mockBuildContext = MockBuildContext();
  });

  group("banks test", (){

    test("Calling fetchAllBanks returns instance of BanksModel list", () async {

      banksBloc.init(mockBuildContext);
      await banksBloc.fetchAllBanks();
      banksBloc.allBanks?.listen((event) {
        expect(event, isInstanceOf<List<BanksModel>>);
      });

    });


  });
}
Run Code Online (Sandbox Code Playgroud)

我的错误日志:

C:\Src\flutter\bin\flutter.bat --no-color test --machine --start-paused test\unit_test\system\bank_configuration\banks_test.dart
Testing started at 18:52 ...
test/unit_test/system/bank_configuration/banks_test.dart:24:22: Error: Non-nullable variable 'mockBuildContext' must be assigned before it can be used.
      banksBloc.init(mockBuildContext);
                     ^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

unit-testing mockito dart flutter flutter-test

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

new_version包返回null flutter

我尝试向用户显示一个对话框,以防发布更新版本。我使用了 new_version 包版本:0.3.0。但我收到警告。在此输入图像描述

  void _checkVersion()async{
  final newVersion=NewVersion(
  final status=await newVersion.getVersionStatus();
  if(status?.canUpdate==true){
    newVersion.showUpdateDialog(
  context: context,
  versionStatus: status!,
  allowDismissal: false,
  dialogTitle: "UPDATE",
      dialogText: "Please update the app from ${status.localVersion} to ${status.storeVersion}",
);}}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

flutter flutter-test flutter-dependencies

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