Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Why does making the callback function async break expect? #2312

Open
CorvetteCole opened this issue Sep 15, 2022 · 7 comments
Open

Why does making the callback function async break expect? #2312

CorvetteCole opened this issue Sep 15, 2022 · 7 comments

Comments

@CorvetteCole
Copy link

I think I just don't understand this, but why does this test fail (as expected):

test('test smoke test -- this test should fail', () {
  fakeAsync((async) {
    expect(true, isFalse);
  });
});

But this one passes:

test('test smoke test -- this test should fail', () async {
  fakeAsync((async) async {
    expect(true, isFalse);
  });
});

I don't understand this behavior, and I think it is the root of several bugs within my tests

@bartekpacia
Copy link
Contributor

bartekpacia commented Nov 18, 2022

I've got the same question – what's the cause of this behavior?

Here's my example. I expect the below test to pass, but it times out instead.

import 'package:fake_async/fake_async.dart';
import 'package:test/test.dart';

void main() {
  test('test smoke test -- this test should pass', () async {
    await fakeAsync((async) async {
      final future = doWork();
      async.elapse(const Duration(seconds: 2));
      final value = await future;
      expect(value, 1);
    });
  });
}

Future<int> doWork() async {
  await Future<void>.delayed(const Duration(seconds: 1));

  return 1;
}
$ dart test main.dart
00:30 +0 -1: test smoke test -- this test should pass [E]                                                                                   
  TimeoutException after 0:00:30.000000: Test timed out after 30 seconds. See https://pub.dev/packages/test#timeouts
  dart:isolate  _RawReceivePortImpl._handleMessage
  

To run this test again: /Users/bartek/fvm/versions/stable/bin/cache/dart-sdk/bin/dart test main.dart -p vm --plain-name 'test smoke test -- this test should pass'
00:30 +0 -1: Some tests failed.                                                                                                             

Consider enabling the flag chain-stack-traces to receive more detailed exceptions.
For example, 'dart test --chain-stack-traces'.

@gnprice
Copy link
Contributor

gnprice commented May 16, 2023

This appears to be the same issue as #2307, and can probably be closed as a duplicate.

(I have the same question, and am curious about the answer!)

@bartekpacia
Copy link
Contributor

I like that this issue has code that can be copy-pasted to reproduce the problem.

@gnprice
Copy link
Contributor

gnprice commented May 17, 2023

Sure. The fix for that is to copy the information over into a single thread 🙂 — done as https://github.com/dart-lang/fake_async/issues/38#issuecomment-1551771957 .

@bartekpacia
Copy link
Contributor

Haha nice :) this one can be closed now.

@CorvetteCole
Copy link
Author

I can close this issue. It's been quite a long time though, I am unsure the dart team is interested in addressing this

@bartekpacia
Copy link
Contributor

@CorvetteCole That's a good idea, everything is already in #2307.

@mosuem mosuem transferred this issue from dart-archive/fake_async Oct 18, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants