Flutter - макет Future.wait в модульном тесте - PullRequest
0 голосов
/ 19 апреля 2020

У меня есть функция, которая возвращает только когда она произвела 4 syn c вызова пакета FlutterSecureStorage, что-то вроде этого ниже. Цель состоит в том, чтобы не возвращаться к будущему из метода FlutterSecureStorage.

  @override
  Future<void> cacheAuthenticatedUserJWT(authenticateUserModel) async {
    return await Future.wait([
      flutterSecureStorage.write(
          key: CACHED_ACCESS_TOKEN, value: authenticateUserModel.accessToken),
      flutterSecureStorage.write(
          key: CACHED_REFRESH_TOKEN, value: authenticateUserModel.refreshToken),
      flutterSecureStorage.write(
          key: CACHED_EXPIRES_IN,
          value: authenticateUserModel.expiresIn.toString()),
      flutterSecureStorage.write(
          key: CACHED_TOKEN_TYPE, value: authenticateUserModel.tokenType),
    ]);
  }

Теперь, когда дело доходит до тестирования, у меня было что-то вроде этого ниже:

test('should store of the tokens into flutter secure storage', () async {

      // Mock call of function
      dataSource.cacheAuthenticatedUserJWT(tAuthenticatedUserModel);

      // Verify all four calls have been made
      verify(secureStorage.write(
          key: CACHED_ACCESS_TOKEN,
          value: tAuthenticatedUserModel.accessToken));
      verify(secureStorage.write(
          key: CACHED_REFRESH_TOKEN,
          value: tAuthenticatedUserModel.refreshToken));
      verify(secureStorage.write(
          key: CACHED_EXPIRES_IN,
          value: tAuthenticatedUserModel.expiresIn.toString()));
      verify(secureStorage.write(
          key: CACHED_TOKEN_TYPE, value: tAuthenticatedUserModel.tokenType));
    });

Это работал, когда у меня не было flutterSecureStorage.write в ожидании, потому что они ничего не возвращали, однако потом я понял, что не знаю, какую следующую функцию запустить, пока она не будет завершена в классе репозитория, просто чтобы убедиться, что данные установлены когда я делаю HTTP-вызов со связанными Json веб-токенами. Но теперь, поскольку они асин c с Future.wait, как я могу высмеять это в тесте? Есть ли метод c с пакетом test_api?

Спасибо,

1 Ответ

1 голос
/ 19 апреля 2020

Чтобы дождаться вызова метода в тесте, вы можете сделать:

 await untilCalled(myMockClass.myAsyncFunction());
 verify(myMockClass.myAsyncFunction());

примечание: метод tillCalled поступает из mockito package

...