首页 > 解决方案 > 如何在 React Native 中测试删除查询 Firebase/mockFirebase?

问题描述

我正在使用 React Native 和 Firebase 构建一个应用程序,并且我想使用 jest/firestore-jest-mock 测试删除功能。

我的问题是当我尝试这个查询时它总是返回 True。

 "devDependencies": {
    "@babel/core": "~7.9.0",
    "firestore-jest-mock": "^0.7.1",
    "jest-expo": "^40.0.1",
 },

这是我的代码:

// Fake DATABASE
mockFirebase({
    database: {
       categories_costs: [{ id: 'key1',title: 'test1', icon: 'icontest1' }],
   },
});

const firebase = require('firebase');
const db = firebase.firestore();

// test with wrong ID
test('Delete Document In categories_income', () => {
return db.collection('categories_costs')
    .doc('keyNoExist')
    .delete()
    .then(() => {

          //Always get into this part  
          console.log("Document successfully deleted!");
    }).catch((error) => {
        console.error("Error removing document: ", error);
    });
 });

尽管 id 是错误的,但测试是这样正确通过的。

标签: javascriptfirebasereact-nativegoogle-cloud-firestorejestjs

解决方案


这是我的解决方案,在这部分它检查文档是否存在,然后将其删除(假数据)。

test('Delete categories_income Bykey', () => {
const ref = db.collection('categories_income').doc('key1');
return ref.get().then((doc) => {
    if (doc.exists) {
        ref.delete().then(() => {
            expect(mockCollection).toHaveBeenCalledWith('categories_income');
        }).catch((error) => {
            expect(error).toEqual('error')
        });
    }else{
        throw new Error("Document Does Not Exist")
    }
 });
});

推荐阅读