Skip to content

Commit 4ffe01d

Browse files
committed
Starting to refactor test suite
1 parent 70591cc commit 4ffe01d

File tree

19 files changed

+251
-552
lines changed

19 files changed

+251
-552
lines changed

karma.conf.js

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,20 @@ const dns = require('node:dns');
33
// The emulator suite fails in CI, only on Node 18.
44
// This apparently fixes it.
55
// https://github.com/firebase/firebase-tools/issues/5755#issuecomment-1535445383
6-
dns.setDefaultResultOrder('ipv4first')
6+
dns.setDefaultResultOrder('ipv4first');
7+
8+
let firestoreEmulatorPort, storageEmulatorPort, authEmulatorPort, databaseEmulatorPort;
9+
if (process.env.FIRESTORE_EMULATOR_HOST &&
10+
process.env.STORAGE_EMULATOR_HOST &&
11+
process.env.FIREBASE_AUTH_EMULATOR_HOST &&
12+
process.env.FIREBASE_DATABASE_EMULATOR_HOST) {
13+
firestoreEmulatorPort = parseInt(process.env.FIRESTORE_EMULATOR_HOST.split(":")[1], 10); // '127.0.0.1:9098'
14+
storageEmulatorPort = parseInt(process.env.STORAGE_EMULATOR_HOST.split(":")[2], 10); // 'http://127.0.0.1:9199'
15+
authEmulatorPort = parseInt(process.env.FIREBASE_AUTH_EMULATOR_HOST.split(":")[1], 10); // '127.0.0.1:9098'
16+
databaseEmulatorPort = parseInt(process.env.FIREBASE_DATABASE_EMULATOR_HOST.split(":")[1], 10); // '127.0.0.1:9002'
17+
} else {
18+
throw "Missing emulator environment variables.";
19+
}
720

821
// Karma configuration file, see link for more information
922
// https://karma-runner.github.io/1.0/config/configuration-file.html
@@ -21,7 +34,13 @@ module.exports = function (config) {
2134
require('@angular-devkit/build-angular/plugins/karma')
2235
],
2336
client: {
24-
clearContext: false // leave Jasmine Spec Runner output visible in browser
37+
clearContext: false, // leave Jasmine Spec Runner output visible in browser
38+
args: [
39+
["FIRESTORE_EMULATOR_PORT", firestoreEmulatorPort],
40+
["DATABASE_EMULATOR_PORT", databaseEmulatorPort],
41+
["STORAGE_EMULATOR_PORT", storageEmulatorPort],
42+
["AUTH_EMULATOR_PORT", authEmulatorPort]
43+
],
2544
},
2645
coverageIstanbulReporter: {
2746
dir: `${process.cwd()}/coverage`,

package.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@
55
"private": true,
66
"scripts": {
77
"test": "npm run build:jasmine && npm run test:node-esm && npm run test:chrome-headless",
8-
"test:watch": "npx --yes firebase-tools@latest emulators:exec --project=demo123 \"ng test --watch=true --browsers=Chrome\"",
9-
"test:chrome": "npx --yes firebase-tools@latest emulators:exec --project=demo123 \"ng test --watch=false --browsers=Chrome\"",
10-
"test:firefox": "npx --yes firebase-tools@latest emulators:exec --project=demo123 \"ng test --watch=false --browsers=Firefox\"",
11-
"test:safari": "npx --yes firebase-tools@latest emulators:exec --project=demo123 \"ng test --watch=false --browsers=SafariNative\"",
12-
"test:chrome-headless": "npx --yes firebase-tools@latest emulators:exec --project=demo123 \"ng test --watch=false --browsers=ChromeHeadless\"",
13-
"test:firefox-headless": "npx --yes firebase-tools@latest emulators:exec --project=demo123 \"ng test --watch=false --browsers=FirefoxHeadless\"",
8+
"test:watch": "npx --yes firebase-tools@latest emulators:exec --project=demo-123 \"ng test --watch=true --browsers=Chrome\"",
9+
"test:chrome": "npx --yes firebase-tools@latest emulators:exec --project=demo-123 \"ng test --watch=false --browsers=Chrome\"",
10+
"test:firefox": "npx --yes firebase-tools@latest emulators:exec --project=demo-123 \"ng test --watch=false --browsers=Firefox\"",
11+
"test:safari": "npx --yes firebase-tools@latest emulators:exec --project=demo-123 \"ng test --watch=false --browsers=SafariNative\"",
12+
"test:chrome-headless": "npx --yes firebase-tools@latest emulators:exec --project=demo-123 \"ng test --watch=false --browsers=ChromeHeadless\"",
13+
"test:firefox-headless": "npx --yes firebase-tools@latest emulators:exec --project=demo-123 \"ng test --watch=false --browsers=FirefoxHeadless\"",
1414
"lint": "ng lint",
1515
"test:node": "node -r tsconfig-paths/register ./dist/out-tsc/jasmine/tools/jasmine.mjs --input-type=commonjs",
1616
"test:node-esm": "node -r tsconfig-paths/register ./dist/out-tsc/jasmine/tools/jasmine.mjs",

src/auth/auth.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { TestBed } from '@angular/core/testing';
22
import { FirebaseApp, getApp, initializeApp, provideFirebaseApp } from '@angular/fire/app';
33
import { Auth, connectAuthEmulator, getAuth, provideAuth } from '@angular/fire/auth';
4-
import { COMMON_CONFIG } from '../test-config';
4+
import { COMMON_CONFIG, authEmulatorPort } from '../test-config';
55
import { rando } from '../utils';
66

77
describe('Auth', () => {
@@ -19,7 +19,7 @@ describe('Auth', () => {
1919
provideFirebaseApp(() => initializeApp(COMMON_CONFIG, appName)),
2020
provideAuth(() => {
2121
providedAuth = getAuth(getApp(appName));
22-
connectAuthEmulator(providedAuth, 'http://localhost:9099');
22+
connectAuthEmulator(providedAuth, `http://localhost:${authEmulatorPort}`);
2323
return providedAuth;
2424
}),
2525
],

src/compat/auth/auth.spec.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
/* eslint-disable @typescript-eslint/ban-ts-comment */
22
import { TestBed } from '@angular/core/testing';
33
import { AngularFireModule, FIREBASE_APP_NAME, FIREBASE_OPTIONS, FirebaseApp } from '@angular/fire/compat';
4-
import { AngularFireAuth, AngularFireAuthModule, SETTINGS } from '@angular/fire/compat/auth';
4+
import { AngularFireAuth, AngularFireAuthModule, SETTINGS, USE_EMULATOR } from '@angular/fire/compat/auth';
55
import firebase from 'firebase/compat/app';
66
import { Observable, Subject } from 'rxjs';
7-
import { COMMON_CONFIG } from '../../../src/test-config';
7+
import { COMMON_CONFIG, authEmulatorPort } from '../../../src/test-config';
88
import 'firebase/compat/auth';
99
import { rando } from '../../../src/utils';
1010

@@ -24,7 +24,8 @@ describe('AngularFireAuth', () => {
2424
AngularFireAuthModule
2525
],
2626
providers: [
27-
{ provide: SETTINGS, useValue: { appVerificationDisabledForTesting: true } }
27+
{ provide: SETTINGS, useValue: { appVerificationDisabledForTesting: true } },
28+
{ provide: USE_EMULATOR, useValue: `http://localhost:${authEmulatorPort}` },
2829
]
2930
});
3031

@@ -136,10 +137,10 @@ describe('AngularFireAuth with different app', () => {
136137
],
137138
providers: [
138139
{ provide: FIREBASE_APP_NAME, useValue: firebaseAppName },
139-
{ provide: FIREBASE_OPTIONS, useValue: COMMON_CONFIG }
140+
{ provide: FIREBASE_OPTIONS, useValue: COMMON_CONFIG },
141+
{ provide: USE_EMULATOR, useValue: `http://localhost:${authEmulatorPort}` },
140142
]
141143
});
142-
143144
app = TestBed.inject(FirebaseApp);
144145
afAuth = TestBed.inject(AngularFireAuth);
145146
});

src/compat/database/database.spec.ts

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ import { NgZone } from '@angular/core';
22
import { TestBed } from '@angular/core/testing';
33
import { ɵAngularFireSchedulers } from '@angular/fire';
44
import { AngularFireModule, FIREBASE_APP_NAME, FIREBASE_OPTIONS, FirebaseApp } from '@angular/fire/compat';
5-
import { AngularFireDatabase, AngularFireDatabaseModule, URL } from '@angular/fire/compat/database';
5+
import { AngularFireDatabase, AngularFireDatabaseModule, USE_EMULATOR } from '@angular/fire/compat/database';
66
import 'firebase/compat/database';
7-
import { COMMON_CONFIG } from '../../../src/test-config';
7+
import { COMMON_CONFIG, databaseEmulatorPort } from '../../../src/test-config';
88
import { rando } from '../../../src/utils';
99

1010
describe('AngularFireDatabase', () => {
@@ -21,7 +21,7 @@ describe('AngularFireDatabase', () => {
2121
AngularFireDatabaseModule
2222
],
2323
providers: [
24-
{ provide: URL, useValue: 'http://localhost:9000' }
24+
{ provide: USE_EMULATOR, useValue: ['localhost', databaseEmulatorPort] }
2525
]
2626
});
2727

@@ -41,7 +41,7 @@ describe('AngularFireDatabase', () => {
4141
});
4242

4343
it('should accept a Firebase App in the constructor', (done) => {
44-
const schedulers = new ɵAngularFireSchedulers();
44+
const schedulers = TestBed.runInInjectionContext(() => new ɵAngularFireSchedulers());
4545
const database = new AngularFireDatabase(
4646
app.options, rando(), undefined, {}, zone, schedulers, undefined, undefined,
4747
undefined, undefined, undefined, undefined, undefined, undefined, undefined,
@@ -62,11 +62,9 @@ describe('AngularFireDatabase', () => {
6262
describe('AngularFireDatabase w/options', () => {
6363
let db: AngularFireDatabase;
6464
let firebaseAppName: string;
65-
let url: string;
66-
65+
6766
beforeEach(() => {
6867
firebaseAppName = rando();
69-
url = `http://localhost:${Math.floor(Math.random() * 9999)}`;
7068
TestBed.configureTestingModule({
7169
imports: [
7270
AngularFireModule.initializeApp(COMMON_CONFIG, rando()),
@@ -75,17 +73,13 @@ describe('AngularFireDatabase w/options', () => {
7573
providers: [
7674
{ provide: FIREBASE_APP_NAME, useValue: firebaseAppName },
7775
{ provide: FIREBASE_OPTIONS, useValue: COMMON_CONFIG },
78-
{ provide: URL, useValue: url }
76+
{ provide: USE_EMULATOR, useValue: ['localhost', databaseEmulatorPort] }
7977
]
8078
});
8179

8280
db = TestBed.inject(AngularFireDatabase);
8381
});
8482

85-
afterEach(() => {
86-
db.database.goOffline();
87-
});
88-
8983
describe('<constructor>', () => {
9084

9185
it('should be an AngularFireDatabase type', () => {

src/compat/database/list/audit-trail.spec.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { TestBed } from '@angular/core/testing';
22
import { AngularFireModule } from '@angular/fire/compat';
3-
import { AngularFireDatabase, AngularFireDatabaseModule, ChildEvent, URL, auditTrail } from '@angular/fire/compat/database';
3+
import { AngularFireDatabase, AngularFireDatabaseModule, ChildEvent, USE_EMULATOR, auditTrail } from '@angular/fire/compat/database';
44
import firebase from 'firebase/compat/app';
55
import { skip } from 'rxjs/operators';
6-
import { COMMON_CONFIG } from '../../../../src/test-config';
6+
import { COMMON_CONFIG, databaseEmulatorPort } from '../../../../src/test-config';
77
import 'firebase/compat/database';
88
import { rando } from '../../../../src/utils';
99

@@ -25,18 +25,14 @@ describe('auditTrail', () => {
2525
AngularFireDatabaseModule
2626
],
2727
providers: [
28-
{ provide: URL, useValue: 'http://localhost:9000' }
28+
{ provide: USE_EMULATOR, useValue: ['localhost', databaseEmulatorPort] }
2929
]
3030
});
3131

3232
db = TestBed.inject(AngularFireDatabase);
3333
createRef = (path: string) => db.database.ref(path);
3434
});
3535

36-
afterEach(() => {
37-
db.database.goOffline();
38-
});
39-
4036
function prepareAuditTrail(opts: { events?: ChildEvent[], skipnumber: number } = { skipnumber: 0 }) {
4137
const { events, skipnumber } = opts;
4238
const aref = createRef(rando());

src/compat/database/list/changes.spec.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { TestBed } from '@angular/core/testing';
22
import { AngularFireModule } from '@angular/fire/compat';
3-
import { AngularFireDatabase, AngularFireDatabaseModule, URL, listChanges } from '@angular/fire/compat/database';
3+
import { AngularFireDatabase, AngularFireDatabaseModule, USE_EMULATOR, listChanges } from '@angular/fire/compat/database';
44
import firebase from 'firebase/compat/app';
55
import { skip, take } from 'rxjs/operators';
6-
import { COMMON_CONFIG } from '../../../../src/test-config';
6+
import { COMMON_CONFIG, databaseEmulatorPort } from '../../../../src/test-config';
77
import 'firebase/compat/database';
88
import { rando } from '../../../../src/utils';
99

@@ -25,18 +25,14 @@ describe('listChanges', () => {
2525
AngularFireDatabaseModule
2626
],
2727
providers: [
28-
{ provide: URL, useValue: 'http://localhost:9000' }
28+
{ provide: USE_EMULATOR, useValue: ['localhost', databaseEmulatorPort] }
2929
]
3030
});
3131

3232
db = TestBed.inject(AngularFireDatabase);
3333
ref = (path: string) => db.database.ref(path);
3434
});
3535

36-
afterEach(() => {
37-
db.database.goOffline();
38-
});
39-
4036
describe('events', () => {
4137

4238
it('should stream value at first', (done) => {

src/compat/database/list/snapshot-changes.spec.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { TestBed } from '@angular/core/testing';
22
import { AngularFireModule } from '@angular/fire/compat';
3-
import { AngularFireDatabase, AngularFireDatabaseModule, ChildEvent, URL, snapshotChanges } from '@angular/fire/compat/database';
3+
import { AngularFireDatabase, AngularFireDatabaseModule, ChildEvent, USE_EMULATOR, snapshotChanges } from '@angular/fire/compat/database';
44
import firebase from 'firebase/compat/app';
55
import { BehaviorSubject } from 'rxjs';
66
import { skip, switchMap, take } from 'rxjs/operators';
7-
import { COMMON_CONFIG } from '../../../../src/test-config';
7+
import { COMMON_CONFIG, databaseEmulatorPort } from '../../../../src/test-config';
88
import 'firebase/compat/database';
99
import { rando } from '../../../../src/utils';
1010

@@ -26,18 +26,14 @@ describe('snapshotChanges', () => {
2626
AngularFireDatabaseModule
2727
],
2828
providers: [
29-
{ provide: URL, useValue: 'http://localhost:9000' }
29+
{ provide: USE_EMULATOR, useValue: ['localhost', databaseEmulatorPort] }
3030
]
3131
});
3232

3333
db = TestBed.inject(AngularFireDatabase);
3434
createRef = (path: string) => db.database.ref(path);
3535
});
3636

37-
afterEach(() => {
38-
db.database.goOffline();
39-
});
40-
4137
function prepareSnapshotChanges(opts: { events?: ChildEvent[], skipnumber: number } = { skipnumber: 0 }) {
4238
const { events, skipnumber } = opts;
4339
const aref = createRef(rando());

src/compat/database/list/state-changes.spec.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { TestBed } from '@angular/core/testing';
22
import { AngularFireModule } from '@angular/fire/compat';
3-
import { AngularFireDatabase, AngularFireDatabaseModule, ChildEvent, URL, stateChanges } from '@angular/fire/compat/database';
3+
import { AngularFireDatabase, AngularFireDatabaseModule, ChildEvent, USE_EMULATOR, stateChanges } from '@angular/fire/compat/database';
44
import firebase from 'firebase/compat/app';
55
import { skip } from 'rxjs/operators';
6-
import { COMMON_CONFIG } from '../../../../src/test-config';
6+
import { COMMON_CONFIG, databaseEmulatorPort } from '../../../../src/test-config';
77
import 'firebase/compat/database';
88
import { rando } from '../../../../src/utils';
99

@@ -25,18 +25,14 @@ describe('stateChanges', () => {
2525
AngularFireDatabaseModule
2626
],
2727
providers: [
28-
{ provide: URL, useValue: 'http://localhost:9000' }
28+
{ provide: USE_EMULATOR, useValue: ['localhost', databaseEmulatorPort] }
2929
]
3030
});
3131

3232
db = TestBed.inject(AngularFireDatabase);
3333
createRef = (path: string) => db.database.ref(path);
3434
});
3535

36-
afterEach(() => {
37-
db.database.goOffline();
38-
});
39-
4036
function prepareStateChanges(opts: { events?: ChildEvent[], skipnumber: number } = { skipnumber: 0 }) {
4137
const { events, skipnumber } = opts;
4238
const aref = createRef(rando());

src/compat/database/observable/fromRef.spec.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
import { TestBed } from '@angular/core/testing';
33
import { ɵZoneScheduler } from '@angular/fire';
44
import { AngularFireModule } from '@angular/fire/compat';
5-
import { AngularFireDatabase, AngularFireDatabaseModule, fromRef } from '@angular/fire/compat/database';
5+
import { AngularFireDatabase, AngularFireDatabaseModule, USE_EMULATOR, fromRef } from '@angular/fire/compat/database';
66
import firebase from 'firebase/compat/app';
77
import { take } from 'rxjs/operators';
88
import { TestScheduler } from 'rxjs/testing';
9-
import { COMMON_CONFIG } from '../../../../src/test-config';
9+
import { COMMON_CONFIG, databaseEmulatorPort } from '../../../../src/test-config';
1010
import { rando } from '../../../../src/utils';
1111

1212
describe('fromRef', () => {
@@ -28,18 +28,14 @@ describe('fromRef', () => {
2828
AngularFireDatabaseModule
2929
],
3030
providers: [
31-
{ provide: URL, useValue: 'http://localhost:9000' }
31+
{ provide: USE_EMULATOR, useValue: ['localhost', databaseEmulatorPort] }
3232
]
3333
});
3434

3535
db = TestBed.inject(AngularFireDatabase);
3636
ref = (path: string) => db.database.ref(path);
3737
});
3838

39-
afterEach(() => {
40-
db.database.goOffline();
41-
});
42-
4339
it('it should be async by default', (done) => {
4440
const itemRef = ref(rando());
4541
itemRef.set(batch);

0 commit comments

Comments
 (0)