Pruebas
Bloc fue diseñado para ser extremadamente fácil de probar. En esta sección, repasaremos cómo hacer pruebas unitarias a un bloc.
Para simplificar, escribamos pruebas para el CounterBloc
que creamos en Conceptos Básicos.
Para recapitular, la implementación de CounterBloc
se ve así:
sealed class CounterEvent {}
final class CounterIncrementPressed extends CounterEvent {}
final class CounterDecrementPressed extends CounterEvent {}
class CounterBloc extends Bloc<CounterEvent, int> { CounterBloc() : super(0) { on<CounterIncrementPressed>((event, emit) => emit(state + 1)); on<CounterDecrementPressed>((event, emit) => emit(state - 1)); }}
Antes de comenzar a escribir nuestras pruebas, vamos a necesitar agregar un marco de pruebas a nuestras dependencias.
Necesitamos agregar test y bloc_test a nuestro proyecto.
dart pub add dev:test dev:bloc_test
flutter pub add dev:test dev:bloc_test
Comencemos creando el archivo para nuestras pruebas de CounterBloc
, counter_bloc_test.dart
e importando el paquete de pruebas.
import 'package:test/test.dart';import 'package:bloc_test/bloc_test.dart';
A continuación, necesitamos crear nuestro main
así como nuestro grupo de pruebas.
void main() { group(CounterBloc, () {
});}
Comencemos creando una instancia de nuestro CounterBloc
que se utilizará en todas nuestras pruebas.
group(CounterBloc, () { late CounterBloc counterBloc;
setUp(() { counterBloc = CounterBloc(); });});
Ahora podemos comenzar a escribir nuestras pruebas individuales.
group(CounterBloc, () { late CounterBloc counterBloc;
setUp(() { counterBloc = CounterBloc(); });
test('initial state is 0', () { expect(counterBloc.state, equals(0)); });});
¡En este punto deberíamos tener nuestra primera prueba aprobada! Ahora escribamos una prueba más compleja usando el paquete bloc_test.
blocTest( 'emits [1] when CounterIncrementPressed is added', build: () => counterBloc, act: (bloc) => bloc.add(CounterIncrementPressed()), expect: () => [1],);
blocTest( 'emits [-1] when CounterDecrementPressed is added', build: () => counterBloc, act: (bloc) => bloc.add(CounterDecrementPressed()), expect: () => [-1],);
Deberíamos poder ejecutar las pruebas y ver que todas están aprobadas.
Eso es todo, las pruebas deberían ser fáciles y deberíamos sentirnos seguros al hacer cambios y refactorizar nuestro código.
Puedes consultar la Aplicación del Clima para un ejemplo de una aplicación completamente probada.