繁体   English   中英

TypeError:firebase.initializeApp不是仅当玩笑运行测试时的函数

[英]TypeError: firebase.initializeApp is not a function only when jest runs tests

在我的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将其公开给网络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()
        }
    })

的package.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"
  }

问题是,我有一个文件夹,名为__mocks__在同一文件夹与firebase.js含有称为另一个文件firebase.js

解决方案正在改变

const firebase = require('firebase')

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM