Mocks for Firebase Auth. Use this package with google_sign_in_mocks to write unit tests involving Firebase Authentication.
A simple usage example. Add firebase_auth_mocks and google_sign_in_mocks to dev dependencies.
import 'package:firebase_auth_mocks/firebase_auth_mocks.dart';
import 'package:google_sign_in_mocks/google_sign_in_mocks.dart';
main() {
// Mock sign in with Google.
final googleSignIn = MockGoogleSignIn();
final signinAccount = await googleSignIn.signIn();
final googleAuth = await signinAccount.authentication;
final AuthCredential credential = GoogleAuthProvider.getCredential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
// Sign in.
final user = MockUser(
isAnonymous: false,
uid: 'someuid',
email: '[email protected]',
displayName: 'Bob',
);
final auth = MockFirebaseAuth(mockUser: user);
final result = await auth.signInWithCredential(credential);
final user = await result.user;
print(user.displayName);
}
MockFirebaseAuth
supports:- instantiating in a signed-in state or not:
MockFirebaseAuth(signedIn: true/false)
. - firing events on sign-in to
authStateChanges
anduserChanges
. signInWithCredential
,signInWithEmailAndPassword
,signInWithCustomToken
,signInAnonymously
,createUserWithEmailAndPassword
,signInWithPopup
andsignInWithProvider
signs in.sendSignInLinkToEmail
,confirmPasswordReset
andverifyPasswordResetCode
.verifyPhoneNumber
resolvescodeSent
.signOut
sendPasswordResetEmail
fetchSignInMethodsForEmail
currentUser
- the ability to throw exceptions using
whenCalling(...).on(...).thenThrow(...)
. See details below. - pass auth information (uid, custom claims...) to Fake Cloud Firestore for security rules via
authForFakeFirestore
. See the docs at fake_cloud_firestore for usage.
- instantiating in a signed-in state or not:
UserCredential
contains the providedUser
with the information of your choice.User
supports:updateDisplayName
reauthenticateWithCredential
updatePassword
delete
sendEmailVerification
getIdToken
andgetIdTokenResult
- the ability to throw exceptions.
whenCalling(Invocation.method(#signInWithCredential, null))
.on(auth)
.thenThrow(FirebaseAuthException(code: 'bla'));
expect(
() => auth.signInWithCredential(FakeAuthCredential()),
throwsA(isA<FirebaseAuthException>()),
);
final auth = MockFirebaseAuth();
whenCalling(Invocation.method(
#fetchSignInMethodsForEmail, ['[email protected]']))
.on(auth)
.thenThrow(FirebaseAuthException(code: 'bla'));
expect(() => auth.fetchSignInMethodsForEmail('[email protected]'),
throwsA(isA<FirebaseAuthException>()));
expect(() => auth.fetchSignInMethodsForEmail('[email protected]'),
returnsNormally);
Supports all of the matchers from the Dart matchers library.
final auth = MockFirebaseAuth();
whenCalling(Invocation.method(
#fetchSignInMethodsForEmail, [endsWith('@somewhere.com')]))
.on(auth)
.thenThrow(FirebaseAuthException(code: 'bla'));
expect(() => auth.fetchSignInMethodsForEmail('[email protected]'),
throwsA(isA<FirebaseAuthException>()));
expect(() => auth.fetchSignInMethodsForEmail('[email protected]'),
returnsNormally);
You can match some or all named parameters. If you omit a named parameter, the library matches it against anything
.
In this example, it will throw an exception if the code
contains the String 'code', no matter the value of newPassword
.
whenCalling(Invocation.method(
#confirmPasswordReset, null, {#code: contains('code')}))
.on(auth)
.thenThrow(FirebaseAuthException(code: 'invalid-action-code'));
expect(
() async => await auth.confirmPasswordReset(
code: 'code',
newPassword: 'password',
),
throwsA(isA<FirebaseAuthException>()),
);
expect(
() => auth.confirmPasswordReset(
code: '10293',
newPassword: 'password',
),
returnsNormally);
firebase_auth | firebase_auth_mocks |
---|---|
4.0.0 | 0.9.0 |
3.5.0 | 0.8.7 |
Please file feature requests and bugs at the issue tracker.