現在、プロジェクトのウィジェット テストをビルドしようとしています (TDD に焦点を当てています)。私は Injectable を使用して依存性注入を生成し、環境をさまざまな実装間で交換しています。私が抱えている問題は@GenerateMocks([IAuthRepository])
、単体テストでそのようなものを使用できないため、モックを GetIt に挿入する必要があることです。
@Environment("test")
@LazySingleton(as: IAuthRepository)
class MockFirebaseAuthFascade with Mock implements IAuthRepository {}
私のウィジェット テストでは、最初にテキスト env を挿入し、次にgetIt<IAuthRepository>()
モック化されたインスタンスを呼び出すために使用して、テストでwhen
andを使用できるようにします。verify
void main() {
setUpAll(() async {
configureInjection(Environment.test);
});
testWidgets(
'GIVEN form is initial state '
'WHEN ElevatedButton is pressed '
'THEN see two error messaged below TextField', (tester) async {
// Arrange
await tester.pumpWidget(
MaterialApp(
localizationsDelegates: const [
Localize.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: Localize.delegate.supportedLocales,
home: BlocProvider(
create: (context) => getIt<SignInFormBloc>(),
child: const Scaffold(
body: SignInForm(),
),
),
),
);
final mockAuth = getIt<IAuthRepository>();
final Finder signIn =
find.byKey(const Key("auth_sign_in_with_email_button"));
// Act
await tester.pumpAndSettle();
await tester.tap(signIn);
await tester.pump(const Duration(seconds: 1));
// Assert
verifyNever(mockAuth.resetPassword(email: anyNamed("named")));
});
}
私が得ているのは、単体テストのようなものanyNamed("named")
を使用していないだけで、嘲笑されているためのエラーです。@GenerateMocks([IAuthRepository])
私が理解できない、または答えを見つけることができるのは@GenerateMocks
、インジェクタブルでどのように使用することになっているのですか? または、テスト環境用により良いモックを生成する別の方法はありますか?
ガイダンスや提案は大歓迎です。