Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

fix: `very_good test` intermittently crashes (exit 255) because test events split across stdout chunks are dropped

Đang mở
#1,784 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
3/5
Thời gian dự kiến
1-2 ngày
Mức phù hợp với người mới
57/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
dart, flutter
Lĩnh vực
cli, testing

Hướng nghiên cứu

Read lib/src/very_good_test_runner.dart, especially mapToTestEvents and _splitLines, then inspect the related tests for event stream parsing. Reproduce parsing with a JSON event split across stdout chunks and verify that it is emitted as one event, including when a multibyte character crosses a chunk boundary. The issue also points to test_cli_runner.dart null assertions as a possible follow-up.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

Description

very_good test intermittently crashes with exit code 255 after the tests have run. No test failed, and no coverage file is written:

Unhandled exception:
Null check operator used on a null value
#0      _testCommand.<anonymous closure> (package:very_good_cli/src/cli/test_cli_runner.dart:580:45)
#1      _RootZone.runUnaryGuarded (dart:async/zone.dart:963:10)
#2      _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:381:11)

This looks like the same symptom as #1627. That issue was closed because it could no longer be reproduced. I think the cause explains why it is intermittent.

Root cause

very_good_test_runner 0.4.0 (the latest; very_good_cli 1.5.0 depends on ^0.4.0) turns the flutter test --machine stdout into events like this (lib/src/very_good_test_runner.dart, mapToTestEvents):

return map(utf8.decode)
    .expand<String>(_splitLines)
    .map<Map<String, Object?>>(_tryDecode)
    .where((value) => value.isNotEmpty)
    .map(TestEvent.fromJson);

_splitLines splits each raw stdout chunk on \n. Lines are not buffered across chunk boundaries. A JSON event that straddles two chunks becomes two fragments. _tryDecode fails on both and returns {}, and the where drops them silently. When the lost event is a testStart, the later testDone for that ID reaches tests[event.testID]! in test_cli_runner.dart and throws.

Where a chunk boundary falls depends on pipe timing. That explains why the crash is rare, why it does not follow any particular test, and why it "goes away" on a rerun. Suites that emit many long print events (for example many Skip: messages) make it more likely.

Suggested fix

Decode and split lines across chunks, for example:

return transform(utf8.decoder)
    .transform(const LineSplitter())
    .map((line) => line.trim())
    .map<Map<String, Object?>>(_tryDecode)
    .where((value) => value.isNotEmpty)
    .map(TestEvent.fromJson);

utf8.decoder as a transformer also handles a multi-byte character that is split across chunks. utf8.decode per chunk would throw on one. Separately, the ! lookups in test_cli_runner.dart (tests[event.testID]!, suites[test.suiteID]!) could degrade gracefully instead of crashing the whole run, as #1627 already suggested.

Environment
Item Value
very_good_cli 1.5.0
very_good_test_runner 0.4.0
Flutter 3.47.7 (stable) on macOS, Apple Silicon
Command very_good test --coverage --min-coverage 100 --test-randomize-ordering-seed random
Suite size ~11,000 tests
Frequency 2 of ~10 full runs in one day; reruns of the same tree pass
Ngôn ngữ chính
Dart
Star
2.4k
Fork
245
Merge trung bình
2 ngày 16 giờ
Pull request đã merge (30 ngày)
21

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của VeryGoodOpenSource/very_good_cli

Tất cả issue của VeryGoodOpenSource/very_good_cli

Issue tương tự

Thêm issue về Dart

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.