spebbe / dartz

Functional programming in Dart
MIT License
749 stars 60 forks source link

Testing with Left data/class keep failing. #94

Closed yusufa445 closed 2 years ago

yusufa445 commented 2 years ago

Hi, Dartz community, I have another Issue when testing left data from either.

test('should return server failure when remote data is unsuccessful',
          () async {
        // arrange
        final ServerFailure sv = ServerFailure();
        when(mockNetworkInfo.isConnected).thenAnswer((_) async => true);
        when(mockRemoteDataSource.getConcreteNumberTrivia(any))
           .thenThrow(ServerException());
        // act
        final result = await repository.getConcreteNumberTrivia(tNumber);

        result.fold((l) {
          verify(mockRemoteDataSource.getConcreteNumberTrivia(tNumber));
          verifyZeroInteractions(mockLocalDataSource);
          expect(l, ServerFailure());
        }, (r) {
          fail("shouldn't returning right data");
        });

this is my repository code.

@override
  Future<Either<Failure, NumberTrivia>> getConcreteNumberTrivia(
      int? number) async {
    networkInfo.isConnected;
    try {
      final remoteTrivia =
      await remoteDataSource.getConcreteNumberTrivia(number);
      localDataSource.cacheNumberTrivia(remoteTrivia);
      return Right(remoteTrivia);
    } on ServerException {
      return Left(ServerFailure());
    }
  }

That test would be resulting in this error Expected: <Instance of 'ServerFailure'> Actual: <Instance of 'ServerFailure'>

I've made sure that ServerFailure has come from the same file and class.

Thanks.

spebbe commented 2 years ago

Hi @yusufa445! Does ServerFailure() == ServerFailure() evaluate to true? That is, have you overridden operator == to implement structural equality? If not, the behaviour you describe is expected, since Dart defaults to reference equality. You might want to try expect(l is ServerFailure, true); or something similar instead?

Good luck!