Firebase mock: mock auth() signIn, in order to trigger onAuthStateChanged

This commit is contained in:
gianantoniopini
2020-12-15 15:32:08 +01:00
parent 942d8a0120
commit d33f707cea
3 changed files with 32 additions and 6 deletions

View File

@ -1 +1,2 @@
module.exports = 'test-file-stub';
const mockFile = 'test-file-stub';
export default mockFile;

View File

@ -6,9 +6,16 @@ const emptyResumeId = 'mtre01';
let resumesDictionary = {};
let useDemoResume = false;
let onAuthStateChangedObservers = [];
const testUser = {
displayName: 'Test User',
email: 'noemail@noemail.com',
};
const __init = () => {
resumesDictionary = {};
useDemoResume = false;
onAuthStateChangedObservers = [];
const demoResume = __readFile('../src/data/demoState.json');
resumesDictionary[demoResumeId] = demoResume;
@ -48,18 +55,34 @@ const __getResumeId = () => {
return __getResume().id;
};
const onAuthStateChanged = (observer) => {
onAuthStateChangedObservers.push(observer);
return () => {
onAuthStateChangedObservers = onAuthStateChangedObservers.filter(
(observer) => observer !== observer,
);
};
};
const signInAnonymously = async () => {
onAuthStateChangedObservers.forEach((observer) => observer(testUser));
var result = await Promise.resolve(testUser);
return result;
};
export default {
database: jest.fn().mockReturnValue({
ref: jest.fn().mockReturnValue({
once: jest.fn().mockResolvedValue({
val: jest.fn().mockImplementation(() => {
return __getResume();
}),
val: jest.fn(__getResume),
}),
}),
}),
auth: jest.fn().mockReturnValue({
onAuthStateChanged: jest.fn().mockReturnValue(jest.fn()),
onAuthStateChanged: onAuthStateChanged,
signInAnonymously: signInAnonymously,
}),
};

View File

@ -1,7 +1,7 @@
import React from 'react';
import { render, cleanup } from '@testing-library/react';
import {
import firebase, {
__init as firebaseMockInit,
__useDemoResume as firebaseMockUseDemoResume,
__getResumeId as firebaseMockGetResumeId,
@ -36,6 +36,8 @@ it('renders correctly', async () => {
</UserProvider>,
);
await firebase.auth().signInAnonymously();
expect(container).toBeTruthy();
//expect(container).toBeInTheDocument();
});