web-dev-qa-db-ja.com

どちらのタイプのどちらかから簡単に抽出する方法(Dartz)

タイプEither<Exception, Object>を返すメソッドから簡単に値を抽出しようとしています。

私はいくつかのテストをしていますが、私のメソッドの返品を簡単にテストできません。

例えば:

final Either<ServerException, TokenModel> result = await repository.getToken(...);

テストするために私はそれをすることができます

expect(result, equals(Right(tokenModelExpected))); // => OK

今すぐ結果を直接取得できますか?

final TokenModel modelRetrieved = Left(result); ==> Not working..

私はそのようにキャストしなければならないことがわかりました:

final TokenModel modelRetrieved = (result as Left).value; ==> But I have some linter complain, that telling me that I shouldn't do as to cast on object...

例外をテストしたいのですが、例えば機能していません。

expect(result, equals(Left(ServerException()))); // => KO

だから私はこれを試してみました

expect(Left(ServerException()), equals(Left(ServerException()))); // => KO as well, because it says that the instances are different.
12
Maurice

ここで私の問題の解決策:

データを抽出/取得するため

final Either<ServerException, TokenModel> result = await repository.getToken(...);
result.fold(
 (exception) => DoWhatYouWantWithException, 
 (tokenModel) => DoWhatYouWantWithModel
);

//Other way to 'extract' the data
if (result.isRight()) {
  final TokenModel tokenModel = result.getOrElse(null);
}
 _

例外をテストするため

//You can extract it from below, or test it directly with the type
expect(() => result, throwsA(isInstanceOf<ServerException>()));
 _
4
Maurice

私はコメントを投稿することはできません...しかし多分あなたはこれを見ることができました post 。それは同じ言語ではありませんが、同じ行動であるようです。

幸運を。

1
user8939092
  Future<Either<Failure, FactsBase>> call(Params params) async {
final resulting = await repository.facts();
return resulting.fold(
  (failure) {
    return Left(failure);
  },
  (factsbase) {
    DateTime cfend = sl<EndDateSetting>().finish;        
    List<CashAction> actions = factsbase.transfers.process(facts: factsbase, startDate: repository.today, finishDate: cfend); // process all the transfers in one line using extensions
    actions.addAll(factsbase.transactions.process(facts: factsbase, startDate: repository.today, finishDate: cfend));
    for(var action in actions) action.account.cashActions.add(action); // copy all the CashActions to the Account.
    for(var account in factsbase.accounts) account.process(start: repository.today);
    return Right(factsbase);
  },
);
 _

}

0
user2244131