TypeError:firebase.initializeApp不是只有在jest运行测试时才有的函数



在我的node-js项目中,我有一个firebase.js文件,它连接到实时数据库,并导出一些与我的用户数据有关的函数。

firebase.js

'use strict'
const firebase = require('firebase')
const config = {
apiKey: 'xxx',
authDomain: 'xxx',
databaseURL: 'xxx',
projectId: 'xxx',
storageBucket: 'xxx',
messagingSenderId: 'xxx'
} 
firebase.initializeApp(config)
const db = firebase.database()
module.exports.getUserByUid = async user => {
const usersRef = db.ref(`users/${user.uid}`)
const snapshot = await usersRef.once('value')
let userToReturn
if(snapshot.exists()) {
userToReturn = snapshot.val()
userToReturn.uid = snapshot.key
} else {
throw Error('user not found')
}
return userToReturn
}

我从userProcessor.js文件调用这个

userProcessor.js

const db = require('../database/firebase')
module.exports.getUserByUid = async request => {
const user = await this.extractUserData(request)
const userToReturn = await db.getUserByUid(user) //here
return userToReturn
}
..
module.exports.extractUserData = request => ({
uid: request.body.uid,
username: request.body.username,
email: request.body.email})

如果我直接从文件中调用它,它会起作用。

我使用koa将其公开给web api上的GET请求,它运行良好(使用Postman进行了测试(。

但当我试图对它进行小丑测试时,它会抛出:

TypeError: firebase.initializeApp is not a function
15 | }
16 | 
> 17 | firebase.initializeApp(config)
|          ^

userProcessor.test.js

const userProcessor = require('../modules/processors/userProcessor')
test('retrieve user that does not exist', async done => {
try {
await userProcessor.getUserByUid({body: {uid: '99xa999axa9x9x'}})
} catch(err) {
expect(err.message).toBe('user not found')
done()
}
})

软件包.json

"devDependencies": {
"eslint": "^5.9.0",
"eslint-config-google": "^0.11.0",
"firebase": "^5.5.8",
"jest": "^23.6.0"
},
"dependencies": {
"firebase-admin": "^6.1.0",
"http-status-codes": "^1.3.0",
"koa": "^2.6.2",
"koa-bodyparser": "^4.2.1",
"koa-cors": "0.0.16",
"koa-router": "^7.4.0",
"supertest": "^3.3.0"
}

问题是,我在与firebase.js相同的文件夹中有一个名为__mocks__的文件夹,该文件夹包含另一个称为firebase.js的文件。

解决方案是改变

const firebase = require('firebase')

const firebase = require('../../node_modules/firebase')

最新更新