我一直在使用firebase函数测试对我的函数进行一些测试。我有一些代码应该发布到Firestore中,基本上与示例在实时数据库示例中显示的方式相同:
exports.addMessage = functions.https.onRequest((req, res) => {
const original = req.query.text;
admin.firestore()
.collection('messages')
.add({ original })
.then(documentReference => res.send(documentReference))
.catch(error => res.send(error));
});
为了进行测试,我使用sinon,mocha和chai欺骗了一些基本功能。这是我当前的测试,但失败,并显示以下错误消息:TypeError: firestoreService.snapshot_ is not a function
describe('addMessage', () => {
// add message should add a message to the database
let oldDatabase;
before(() => {
// Save the old database method so it can be restored after the test.
oldDatabase = admin.firestore;
});
after(() => {
// Restoring admin.database() to the original method.
admin.firestore = oldDatabase;
});
it('should return the correct data', (done) => {
// create stubs
const refStub = sinon.stub();
// create a fake request object
const req = {
query : {
text: 'fly you fools!'
}
};
const snap = test.firestore.makeDocumentSnapshot({ original: req.query.text }, 'messages/1234');
// create a fake document reference
const fakeDocRef = snap._ref;
// create a fake response object
const res = {
send: returnedDocRef => {
// test the result
assert.equal(returnedDocRef, fakeDocRef);
done();
}
};
// spoof firestore
const adminStub = sinon.stub(admin, 'firestore').get(() => () => {
return {
collection: () => {
return {
add: (data) => {
const secondSnap = test.firestore.makeDocumentSnapshot(data, 'messages/1234');
const anotherFakeDocRef = secondSnap._ref;
return Promise.resolve(anotherFakeDocRef);
}
}
}
}
});
// call the function to execute the test above
myFunctions.addMessage(req, res);
});
});
我的问题是我该怎么解决?
我以前进行的测试刚刚通过了第一个快照和fakeDocRef,并且测试通过了,但是一旦我使用新的伪造文档引用解决了诺言,它就会失败...
任何帮助将不胜感激!谢谢!
答案 0 :(得分:0)
有三种不同的呼叫类型,分别是:
- Operating on the Collections。
- Operating on the Documents。
- 对查询结果进行操作。
必须一致使用它们。 请参阅文档以查看difference operation on the collection and the document。