BloC testing "The method xxx isn't defined for the type 'Object'" error

150

The method 'X' isn't defined for the type 'Object'. error is usually thrown when the type of a specific object is not clear, hence it falls back to the general type Object.

Based on the docs you provided, you should define the Cubit class type and it's state type inside blocTest method:

blocTest<CounterCubit, CounterState>( // <-- Notice the defined types
  "The cubit should emit a CounterState(countervalue:1, wasIncremented:true) when cubit.increment() is called.",
  build: () => CounterCubit(), // <-- Create an instance of a Cubit
  act: (cubit) => cubit.increment(), // <-- ! is not needed here since the type is defined
  expect: () => [ // <-- "expect" should be defined as an array of expected states
    CounterState(counterValue: 1, wasIncremented: true),
  ]
);

Share:
150
Admin
Author by

Admin

Updated on December 01, 2022

Comments

  • Admin
    Admin over 1 year

    I am trying to learn testing with bloc. Followed the procedure as stated in docs.

    I have lib/cubit/counter_cubit.dart and lib/cubit/counterState.dart files

    counter_cubit.dart is:

    import 'package:bloc/bloc.dart';
    import 'package:equatable/equatable.dart';
    
    part 'counter_state.dart';
    
    class CounterCubit extends Cubit<CounterState> {
      CounterCubit() : super(CounterState(counterValue: 0, wasIncremented: false));
    
      void increment() => emit(
          CounterState(counterValue: state.counterValue + 1, wasIncremented: true));
    
      void decrement() => emit(CounterState(
          counterValue: state.counterValue - 1, wasIncremented: false));
    }
    
    

    counter_state.dart is:

    part of 'counter_cubit.dart';
    
    class CounterState extends Equatable {
      int counterValue;
      bool wasIncremented;
    
      CounterState({
        required this.counterValue,
        required this.wasIncremented,
      });
    
      @override
      List<Object?> get props => [counterValue, wasIncremented];
    }
    
    

    and the counter_cubit_test.dart is:

    import 'package:bloc_basics/cubit/counter_cubit.dart';
    import 'package:bloc_test/bloc_test.dart';
    import 'package:flutter_test/flutter_test.dart';
    
    void main() {
      group("CounterCubit", () {
        final CounterCubit counterCubit = CounterCubit();
    
        test(
            "the initial state for the CounterCubitis CounterState(counterValue:0, wasIncremented:false)",
            () {
          expect(counterCubit.state,
              CounterState(counterValue: 0, wasIncremented: false));
        });
    
        blocTest(
            "The cubit should emit a CounterState(countervalue:1, wasIncremented:true) when cubit.increment() is called.",
            build: () => counterCubit,
            act: (cubit) => cubit!.increment(),
            expect: () => CounterState(counterValue: 1, wasIncremented: true));
      });
    }
    
    

    That line act: (cubit) => cubit!.increment() in counter_cubit_test.dart is throwing The method 'increment' isn't defined for the type 'Object'. Error.

    Couldn't figure out.

  • Admin
    Admin about 2 years
    Thaks a lot. It worked