首页 > 解决方案 > 测试 Flutter 行为主题

问题描述

这是我正在尝试测试的服务。

class AccountService {
  AuthLibrary _library;

  BehaviorSubject<User> _user;

  Stream<User> get user => _user.stream.asBroadcastStream();

  AccountService(this._library) : _user = BehaviorSubject() {
    checkUserLogin();
  }

  Future<void> checkUserLogin() async {
    final token = await _library.getToken();
    final tokenLength = token?.length ?? 0;
    return _user.add(tokenLength > 0 ? User(token: token) : null);
  }
}

这是我的测试:

class MockAuth extends Mock implements AuthLibrary {}

main() {
  AuthLibrary _auth0;

  setUpAll(() {
    _auth0 = MockAuth();
  });

  test('set user if token is not empty', () async {
    final expected = User(token: "21398712938721");
    when(_auth0.getToken()).thenAnswer((_) async => expected.toString());

    final service = AccountService(_auth0);
    verify(_auth0.getToken()).called(1);
    expect(service.user, emits(expected));
  });
}

我在互联网上找不到如何通过此测试。我在那里发现的每个示例都使用相同的模式,但由于某种原因,它在这里失败了。因此,当我运行测试时,出现以下错误:

Expected: should emit an event that <Instance of 'User'>
  Actual: <Instance of 'Observable<User>'>
   Which: emitted • Instance of 'User'

标签: testingfluttermockito

解决方案


推荐阅读