3
votes

Pourquoi ce test Flutter échoue-t-il sur CodeMagic?

Lorsque j'essaye de tester la compilation sur Codemagic, le test échoue. J'ai essayé de changer le code widget_test.dart, toujours le problème reste non résolu. Comment résoudre ce problème?

C'est l'erreur lancée par codemagic.

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';

import 'package:top100/main.dart';

void main() {
  testWidgets('Counter increments smoke test', (WidgetTester tester) async {
    // Build our app and trigger a frame.
    await tester.pumpWidget(MyApp());

    // Verify that our counter starts at 0.
    expect(find.text('0'), findsOneWidget);
    expect(find.text('1'), findsNothing);

    // Tap the '+' icon and trigger a frame.
    await tester.tap(find.byIcon(Icons.add));
    await tester.pump();

    // Verify that our counter has incremented.
    expect(find.text('0'), findsNothing);
    expect(find.text('1'), findsOneWidget);
  });
}

Le code de mon fichier Widget_test est

== QA ==

== flutter test --machine ==
{"protocolVersion":"0.1.1","runnerVersion":null,"pid":949,"type":"start","time":0}
{"suite":{"id":0,"platform":"vm","path":"/Users/builder/clone/test/widget_test.dart"},"type":"suite","time":1}
{"test":{"id":1,"name":"loading /Users/builder/clone/test/widget_test.dart","suiteID":0,"groupIDs":[],"metadata":{"skip":false,"skipReason":null},"line":null,"column":null,"url":null},"type":"testStart","time":3}
{"count":1,"type":"allSuites","time":7}
{"testID":1,"result":"success","skipped":false,"hidden":true,"type":"testDone","time":15317}
{"group":{"id":2,"suiteID":0,"parentID":null,"name":null,"metadata":{"skip":false,"skipReason":null},"testCount":1,"line":null,"column":null,"url":null},"type":"group","time":15341}
{"test":{"id":3,"name":"Counter increments smoke test","suiteID":0,"groupIDs":[2],"metadata":{"skip":false,"skipReason":null},"line":107,"column":3,"url":"package:flutter_test/src/widget_tester.dart","root_line":14,"root_column":3,"root_url":"file:///Users/builder/clone/test/widget_test.dart"},"type":"testStart","time":15343}
{"testID":3,"messageType":"print","message":"══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK ╞════════════════════════════════════════════════════\nThe following TestFailure object was thrown running a test:\n  Expected: exactly one matching node in the widget tree\n  Actual: ?:<zero widgets with text \"0\" (ignoring offstage widgets)>\n   Which: means none were found but one was expected\n\nWhen the exception was thrown, this was the stack:\n#4      main.<anonymous closure> (file:///Users/builder/clone/test/widget_test.dart:19:5)\n<asynchronous suspension>\n#5      testWidgets.<anonymous closure>.<anonymous closure> (package:flutter_test/src/widget_tester.dart:118:25)\n<asynchronous suspension>\n#6      TestWidgetsFlutterBinding._runTestBody (package:flutter_test/src/binding.dart:630:19)\n<asynchronous suspension>\n#9      TestWidgetsFlutterBinding._runTest (package:flutter_test/src/binding.dart:613:14)\n#10     AutomatedTestWidgetsFlutterBinding.runTest.<anonymous closure> (package:flutter_test/src/binding.dart:1010:24)\n#16     AutomatedTestWidgetsFlutterBinding.runTest (package:flutter_test/src/binding.dart:1007:15)\n#17     testWidgets.<anonymous closure> (package:flutter_test/src/widget_tester.dart:116:22)\n#18     Declarer.test.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:test_api/src/backend/declarer.dart:168:27)\n<asynchronous suspension>\n#19     Invoker.waitForOutstandingCallbacks.<anonymous closure> (package:test_api/src/backend/invoker.dart:250:15)\n<asynchronous suspension>\n#24     Invoker.waitForOutstandingCallbacks (package:test_api/src/backend/invoker.dart:247:5)\n#25     Declarer.test.<anonymous closure>.<anonymous closure> (package:test_api/src/backend/declarer.dart:166:33)\n#30     Declarer.test.<anonymous closure> (package:test_api/src/backend/declarer.dart:165:13)\n<asynchronous suspension>\n#31     Invoker._onRun.<anonymous closure>.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:test_api/src/backend/invoker.dart:400:25)\n<asynchronous suspension>\n#45     _Timer._runTimers (dart:isolate-patch/timer_impl.dart:382:19)\n#46     _Timer._handleMessage (dart:isolate-patch/timer_impl.dart:416:5)\n#47     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:172:12)\n(elided 28 frames from class _FakeAsync, package dart:async, package dart:async-patch, and package stack_trace)\n\nThis was caught by the test expectation on the following line:\n  file:///Users/builder/clone/test/widget_test.dart line 19\nThe test description was:\n  Counter increments smoke test\n════════════════════════════════════════════════════════════════════════════════════════════════════","type":"print","time":17092}
{"testID":3,"error":"Test failed. See exception logs above.\nThe test description was: Counter increments smoke test","stackTrace":"","isFailure":false,"type":"error","time":17119}
{"testID":3,"result":"error","skipped":false,"hidden":false,"type":"testDone","time":17134}
{"success":false,"type":"done","time":17231}


QA failed :|
Flutter test run failed.

== QA failed, ending build ==


Build failed :|
Test run failed: Flutter test run failed.


6 commentaires

Mais ce test passe dans votre local, non?


Si vous voulez dire en l'exécutant sur mon téléphone, oui je peux!


exécuter le flutter test Ce test est généré avec le modèle de flutter create . Cela ne fonctionnera que si vous avez toujours l'application de compteur. Si ce n'est pas le cas, supprimez le test :)


J'ai supprimé le dossier, une fois que j'ai créé le projet. Je ne savais pas que c'était important. Existe-t-il un moyen de résoudre ce problème? Parce que j'ai presque terminé une nouvelle application mais je ne peux pas la tester dans Codemagic. J'ai essayé de supprimer le répertoire «test», cela n'a évidemment pas fonctionné.


Salut @GokulaKrishnan, avez-vous réussi à corriger vos tests?


Ouais. Enfin pas exactement. J'ai supprimé tout le dossier de test et j'ai exécuté le CI / CD sans test de scintillement. Alors oui, ça a marché.


3 Réponses :


2
votes

Le fichier widget_test.dart est créé avec le projet par défaut dans Flutter, qui a deux champs de texte et une icône qui peut être tapée. Depuis que vous avez modifié l'interface utilisateur de l'application, vous pouvez maintenant afficher différents éléments et le test échoue car il attend les éléments de projet de modèle que vous n'avez pas. Vous pouvez commenter la méthode testWidgets pour une solution rapide:

// This is a basic Flutter widget test.
//
// To perform an interaction with a widget in your test, use the WidgetTester
// utility that Flutter provides. For example, you can send tap and scroll
// gestures. You can also use WidgetTester to find child widgets in the widget
// tree, read text, and verify that the values of widget properties are correct.

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';

import 'package:fin_app_flutter/main.dart';

void main() {
  /*
  testWidgets('Counter increments smoke test', (WidgetTester tester) async {
    // Build our app and trigger a frame.
    await tester.pumpWidget(MyApp());

    // Verify that our counter starts at 0.
    expect(find.text('0'), findsOneWidget);
    expect(find.text('1'), findsNothing);

    // Tap the '+' icon and trigger a frame.
    await tester.tap(find.byIcon(Icons.add));
    await tester.pump();

    // Verify that our counter has incremented.
    expect(find.text('0'), findsNothing);
    expect(find.text('1'), findsOneWidget);
  });
  */
}

N'oubliez pas de valider et de synchroniser votre branche sur Codemagic.


0 commentaires

0
votes

Cela se produit parce que Codemagic essaie d'exécuter des tests d'intégration que vous n'avez probablement pas. Veuillez noter que les tests d'intégration sont différents des tests unitaires ou des tests de widget. Les tests d'intégration sont exécutés par Flutter Driver, en savoir plus .

Les tests d'intégration sont également appelés «tests Flutter Driver». Si vous effectuez une flutter drive , Flutter exécute tous les tests d'intégration de votre projet. Voici un extrait de la commande help:

Capture d'écran du 2020-09-06 15-58-07

Cela dit, la raison pour laquelle vous obtenez cette erreur est que vous n'avez aucun test d'intégration dans votre projet. Tout ce que vous avez à faire est de désactiver les tests d'intégration dans votre flux de travail Codemagic:

entrez la description de l'image ici


0 commentaires

1
votes

J'ai supprimé le dossier de test et l'ai exécuté, cela a bien fonctionné.


0 commentaires