Я использую Мокко для проверки своих функций. Они работают как при развертывании в Firebase, так и при локальном запуске с эмулятором.
Моя проблема заключается в том, что я продолжаю получать эту ошибку, указывающую на саму функцию:
function:getTags:error: TypeError: Cannot read property 'send' of undefined
at /Users/garrettlove/development/projects/cirrcl/crcle_backend/functions/categories/tags/getTags.js:24:7
at processTicksAndRejections (internal/process/task_queues.js:93:5)
(node:76616) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'send' of undefined
at /Users/garrettlove/development/projects/cirrcl/crcle_backend/functions/categories/tags/getTags.js:28:7
at processTicksAndRejections (internal/process/task_queues.js:93:5)
(node:76616) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:76616) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
И тогда Я получаю эту ошибку, указывающую на мой тест:
test:getTags:error: TypeError: Cannot read property 'should' of undefined
at Context.<anonymous> (/Users/garrettlove/development/projects/cirrcl/crcle_backend/functions/test/index.test.js:17:11)
Вот мой код функции:
const functions = require('firebase-functions')
const mongoose = require('mongoose')
const Tag = require('../../models/tag')
const uri = 'MongoDB URL'
module.exports = functions.https.onRequest(async (req, res) => {
try {
await mongoose.connect(uri, { useNewUrlParser: true, useUnifiedTopology: true })
const result = await Tag.find({})
res.send({ message: 'Request fulfilled', success: true, result: result })
} catch (err) {
console.log('function:getTags:error: ', err)
res.send({ message: 'Unable to fulfill the request', success: false, error: err })
}
})
Наконец, вот мой код теста:
const admin = require('firebase-admin')
const serviceAccount = require('../../../../../keys/cirrcl-firebase.json');
const getTags = require('../categories/tags/getTags')
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "DB URL"
});
describe('Describe something here', () => {
it('Should succeed or fail', async () => {
try {
const result = await getTags()
console.log('getTags test result: ', result)
result.should.have.status(200)
} catch (err) {
console.log('test:getTags:error: ', err)
// err.should.throw()
}
})
})
Единственное, что я могу подумать о проблеме с учетными данными, но это не совсем имеет смысла, так как у меня есть сертификат (я также пробовал без него, а также с сертификатом движка приложения, который, как говорят некоторые документы) Кроме того, так как я могу запустить это локально, что я и думал, что мокко все равно делал, я немного запутался