flutter-test - Flutter 如何测试 Either<Failure,List<Object>>

标签 flutter-test either

它似乎与匹配器具有相同的值,但仍然无法通过测试,可能是因为内存地址的问题。谁能告诉我当列表位于 Either<< Right >>

时如何测试结果
test('get board list from remote data source', () async {
   when(mockBoardRemoteDataSource.getBoards())
       .thenAnswer((_) async => tBoardModels);

   final result = await repository.getBoards();

   verify(mockBoardRemoteDataSource.getBoards());
   expect(result, equals(Right(toBoards)));   
   // Either<Failure, List<BoardInfo>> result;
   // (new) Right<dynamic, List<BoardInfo>> Right(List<BoardInfo> _r)
});

//控制台结果

Expected: Right<dynamic, List<BoardInfo>>:<Right([_$_BoardInfo(1, name1, address1), _$_BoardInfo(2, name2, address2)])>
Actual: Right<Failure, List<BoardInfo>>:<Right([_$_BoardInfo(1, name1, address1), _$_BoardInfo(2, name2, address2)])>
    
package:test_api                                                                   expect
package:flutter_test/src/widget_tester.dart 455:16                                 expect
test\features\nurban_honey\data\repositories\board_repository_impl_test.dart 58:9  main.<fn>.<fn>.<fn>

//BoardInfo实现

import 'package:equatable/equatable.dart';
import 'package:freezed_annotation/freezed_annotation.dart';

part 'board_info.freezed.dart';

@freezed
class BoardInfo extends Equatable with _$BoardInfo {
  BoardInfo._();
  factory BoardInfo(int id, String name, String address) = _BoardInfo;

  @override
  List<Object?> get props => [id, name, address];
}

最佳答案

感谢 Jay,他的回答帮助我做出了决定。

这就是我进行测试的方式:

// Act
var results = (await repository.fetch()).fold(
    (failure) => failure,
    (response) => response,
);

然后我做了一个类型期望,与我的用例中声明的失败类型相匹配:

执行成功的情况

// Assert
expect(results, isA<ResultType>());

在失败预期的情况下

// Assert
expect(results, isA<FailureType>());

整个测试用例如下所示

test('On successful execution, should returns a SuccessResultType', () async {
  
  // Arrange
  repository = MyUseCaseRepository();

  // Act
  var results = (await repository.fetch()).fold(
    (failure) => failure,
    (response) => response,
  );

  // Assert
  expect(results, isA<SuccessResultType>());
});

我希望这种方法可以帮助任何人!

关于flutter-test - Flutter 如何测试 Either<Failure,List<Object>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71644737/

相关文章:

FLUTTER:测试 cubit 时,不会发出加载状态,只会发出加载状态

scala - 模式匹配

flutter - 为什么 expect(Future.value(true), Future.value(true)) 在 flutter 测试中失败?

flutter - Dart/Flutter : Navigate (with Navigator) between Pages without context (so no Navigator. 推送?)

android - Flutter 应用程序在使用 flutter_driver 运行时无法加载 Json 文件

exception-handling - 在 Clojure 中处理纯度错误?

scala - 创建 Either::Left 并显式传递可抛出对象

flutter - 在 AWS Device Farm、Saucelabs、Firebase 测试实验室等中运行 Flutter 集成测试

haskell - 为什么 Either 没有替代实例,而是有一个行为与替代类似的半群?

scala - 在自由 monad 中使用 Either