Hallo, ich versuche, Unit-Tests zu entwickeln, während ich mit AngularJS + Firebase ein einfaches Web entwickle. Ich habe jedoch ein Problem mit der Definition der Spezifikation und dem Testen des Testläufers
meinProjekt/test/spec/main.js:
describe('Controller: MainCtrl', function() {
var MainCtrl, scope
beforeEach(module('MainApp'));
beforeEach(inject(function ($controller, $rootScope) {
scope = $rootScope.$new();
MainCtrl = $controller('MainCtrl', {
$scope: scope
})
}));
it('should....',function(){
expect(true).toBe(true)
})
it('should2....',function(){
expect(false).toBe(false)
})
});
ergebnis:
PhantomJS 2.1.1 (Mac OS X 0.0.0) Controller: MainCtrl should.... FAILED
Error: [$injector:modulerr] Failed to instantiate module MainApp due
to: Firebase: Firebase App named '[DEFAULT]' already exists
(app/duplicateapp).
Das einmalige Definieren der Spezifikation ist jedoch kein Problem. Zum Beispiel:
it('should....',function(){
expect(true).toBe(true)
})
Ich weiß nicht, warum ich aus diesem Grund einen Hinweis gebe
Hier ist das Projekt, das ich entwickle.
if (!firebase.apps.length) {
firebase.initializeApp({});
}
ich habe nur einen Blick auf Ihr Github-Repo geworfen, um zu sehen, dass es mehr .js-Dateien gibt als in Ihrer Frage vorgeschlagen. Ich hatte 2 separate .js-Dateien. Beide befinden sich auf derselben HTML-Seite, die sowohl die Standard-App konfiguriert als auch initialisiert hat, wenn sie für diese Seite nur einmal ausgeführt werden musste, glaube ich. Was für mich funktionierte, war das zweite "initializeApp ()" zu kommentieren, und ich bekam diesen Fehler nicht mehr. Versuchen Sie, in Ihren .js nach dem Folgenden zu suchen und eine der Initialisierungen auszukommentieren oder zu löschen.
var config = {
apiKey: "my api key",
authDomain: "something.firebaseapp.com",
databaseURL: "https://somesite.firebaseio.com",
projectId: "myProjectId",
storageBucket: "somesite.appspot.com",
messagingSenderId: "someIntegers"
};
//firebase.initializeApp(config);
Ich hatte das gleiche Problem mit Firebase, und ich stelle fest, dass ich die Firebase zweimal initialisiert habe. Beispiel:
function initializeFirebase(){
var config = {
apiKey: "myApiKey",
authDomain: "myAuthDomain",
databaseURL: "myDatabaseUrl",
storageBucket: "myStorageBocket",
messagingSenderId: "idhere"
};
//initialize firebase
firebase.initializeApp(config);
}
In meinem Fall habe ich reagieren verwendet, und ich habe initializeFirebase () von zwei verschiedenen Komponenten aus aufgerufen. Und jetzt kann ich meine Datenbank abfragen, Datensätze einfügen, entfernen usw.
Hoffe das hilft jemandem
Ich hatte das gleiche Problem
wenn Sie ES6-Module verwenden und Firebase von npm installiert haben, können Sie init scrips nicht in index.html einfügen
es handelt sich um Doppelungen von Abhängigkeiten der Firebase
Ich habe dieses Problem kürzlich in meinem eigenen Code gelöst. Mein Problem wurde durch versehentliches Verknüpfen meiner Javascript-Datei, die initializeApp () aufruft, im Kopf und im Hauptteil meiner HTML-Datei verursacht. Meine Lösung bestand darin, das Duplikat-Javascript-Tag im Kopf meiner HTML-Datei zu löschen, sodass nur ein Element im Hauptteil vorhanden war.
Durchsuchen Sie Ihren Code, um sicherzustellen, dass Sie initializeApp () nur einmal aufrufen. Dies umfasst alle js-Dateien, die möglicherweise die Methode aufrufen oder die js-Datei in Ihrer html-Datei duplizieren.