ves*_*sii 5 javascript node.js firebase nock google-cloud-firestore
我有一个用 NodeJS 编写的 REST API。REST API 获取文件和信息,然后将文件上传到驱动器并将信息存储在我的 Firebase/Firestore 数据库中。我正在尝试编写测试来测试我的 REST API,因此我需要模拟 Firestore。我已经通过nock
跟踪googleapis
. 现在我正在尝试对 Firestore 做同样的事情。
我尝试了不同的方法,例如,我尝试过的身份验证(基于文档):
nock('https://firestore.googleapis.com/$discovery/rest')
.persist()
.post('')
.reply(200, { 'access_token': 'abc', 'refresh_token': '123', 'expires_in': 10 })
Run Code Online (Sandbox Code Playgroud)
但诺克并没有遵循这些要求。如何使用nock来跟踪以下代码?包实际上是否firebase
向 API 发出请求?
const firebase = require("firebase");
// Required for side-effects
require("firebase/firestore");
// First code - authenatiocation
firebase.initializeApp(firebaseConfig);
db = firebase.firestore();
// ...
// Second code - Get data from DB
const snapshot = await db.collection(collection).orderBy("timestamp", "desc").get();
// ...
// Third code - upload new report
const response = await db.collection(collection).doc(document_id).set(data);
Run Code Online (Sandbox Code Playgroud)
如果不可能nock
,那么可以实现吗?
有人可能会说,存根 Firebase 方法比模拟库内部可能进行的任何 API 调用更有意义。后者假设了解库的内部功能,但没有充分利用抽象的好处。
您可以使用sinon来存根 Firebase 方法。就像是,
db = firebase.firestore();
const stub = sinon.stub(db, 'collection')
.returns({
orderBy: sinon.stub().returns({
get: sinon.stub().returns(yourDocObjectHere)
}),
doc: sinon.stub().returns({
set: sinon.stub().returns(someObjectHere)
})
})
Run Code Online (Sandbox Code Playgroud)
然后断言像
sinon.assert.calledWith(db.collection.orderBy, 'timestamp', 'desc');
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
353 次 |
最近记录: |