sinon 存根一个带有用于单元测试的链式方法的 firebase 集合......sinon、node/express、Jasmine

问题描述

在我的 nodejs 代码中,我有一个片段:

   await cfdb.collection('users').doc(userAccount.uid).set({
      email: 'email@domain.com',firstName: 'firstname',lastName: 'Lastname,});

我将如何为使用 jasmine 的单元测试创​​建一个 sinon 模拟?

更完整的上下文....

 const { Firestore } = require('@google-cloud/firestore');

  const cfdb = new Firestore();

  // Create Firestore user document
  try {
    await cfdb.collection('users').doc('E7skP0IncSW7wkBxnrYFx6udzGH2').set({
      email: 'email@domain.com',firstName: 'Firstname',lastName: 'Lastname',});


  } catch (error) {
    res.json({ success: false,payload: { message: 'Firebase User write error. ' + error } });
    return;
  }

  // Success
  res.json({ success: true,payload: { message: 'User created.',userAccount: userAccount } });
}

解决方法

您不会使用 sinon 来模拟这一点,您会使用 @firebase/rules-unit-testing 包来强制与 Firestore/RTDB 模拟器交互。

,

这是解决方案...

        const collectionStub = sinon.stub(firebase.cfDB,'collection')
        .get(() => {
            return function() {
                return {
                    doc: (path) => {
                        return {
                            set: () => [{user: 'mock-user-1'},{user: 'mock-user-2'}]
                        }
                    }
                }
            }
        });

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...