名为"[DEFAULT]"的Firebase应用程序已存在(app/duplicate-app)

par*_*yun 16 unit-testing angularjs firebase karma-runner karma-jasmine

嗨我正在尝试使用AngularJS + Firebase开发一个简单的网站进行单元测试,但我在定义规范和尝试测试运行器时遇到了问题

myProject/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)
})
});
Run Code Online (Sandbox Code Playgroud)

结果:

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).
Run Code Online (Sandbox Code Playgroud)

但是,定义规范一次不是问题.例如:

it('should....',function(){
   expect(true).toBe(true)
})
Run Code Online (Sandbox Code Playgroud)

我不知道为什么这就是我给你一个暗示的原因

这是我正在开发的项目.

https://github.com/parkwookyun/firebase-angular-board

Isa*_*tte 45

if (!firebase.apps.length) {
   firebase.initializeApp({});
}
Run Code Online (Sandbox Code Playgroud)

类似的答案在这里

  • 一行中更好: ```!firebase.apps.length ?firebase.initializeApp(config) : firebase.app()``` (12认同)
  • 在版本 9 中,它是这样的: `let firebaseApp; if (!getApps().length) { firebaseApp =initializeApp(config); } else { firebaseApp = getApp(); }` (5认同)
  • 我非常感谢您的解决方案。你是最好的 (2认同)
  • 还值得指出的是, getApps 和 getApp 是可以从“firebase/app”导入的函数 (2认同)

小智 7

我在使用Firebase时遇到了同样的问题,并且发现自己两次初始化了Firebase,例如:

function initializeFirebase(){    
 var config = {
    apiKey: "myApiKey",
    authDomain: "myAuthDomain",
    databaseURL: "myDatabaseUrl",
    storageBucket: "myStorageBocket",
    messagingSenderId: "idhere"   
   };   
   //initialize firebase  
   firebase.initializeApp(config);  
}
Run Code Online (Sandbox Code Playgroud)

在我的情况下,我使用react,并且我从两个不同的组件调用initializeFirebase(),但是我决定从父组件调用它。现在,我可以查询数据库,插入记录,删除等等。

希望这可以帮助某人


Dua*_*ker 4

我只浏览了你的 github 存储库,发现 .js 文件比你的问题中建议的要多。我有 2 个独立的 .js 文件。两者都包含在同一个 html 页面上,该页面同时配置和初始化默认应用程序,而我相信该页面只需要完成一次。对我有用的是注释掉第二个“initializeApp()”,我不再收到该错误。尝试在 .js 中查找以下内容并注释掉或删除其中一个初始化。

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);