如何对依赖于 Firebase 引用的函数进行单元测试



我想对应用中调用和更新 Firebase 引用的函数进行单元测试。 我面临的问题是,当我尝试运行测试并导入包含该函数的文件时,我收到以下错误SyntaxError: Unexpected token u in JSON at position 0该错误指向函数文件中导入我对 Firebase 的引用的行。

我在这个项目中使用 Webpack 和 Babel,所以我尝试在 webpack.config 文件中设置一个resolve.alias,该文件在应用程序运行时有效,但在运行时不起作用npm test。 在这一点上,我不知道如何模拟Firebase引用,以便我可以测试该函数的其他功能。 下面是一些示例代码:

常量/索引.js

import firebase from 'firebase';
const firebaseConfig = JSON.parse(unescape(`${config.FIREBASE_CONFIG}`));
const mainApp = firebase.initializeApp(firebaseConfig);
export const ref = mainApp.database().ref();

操作/设置.js

import * as actions from './';
import { ref } from '../constants';
export const updateSetting = (e, value) =>
  (dispatch) => {
     ref.child('setting')
      .set(value)
      .then(() => {
        dispatch(actions.confirmFBSave());
      })
      .catch((err) => {
        dispatch(actions.failFBSave({ text: err.code }));
      });
  };

您使用什么测试框架 Qunit、茉莉花、摩卡?使用AngularFire和Angular,它要容易得多,因为您可以在DI中传递模拟类,但是我也在服务器端测试了非angular js。然后我使用 Sinon 获取 mock initializeApp 并返回一个 Mock firebase 应用程序。

你也可以尝试 https://github.com/thlorenz/proxyquire 我不需要走那么远,但我已经看到了它的建议。这样,您基本上可以拦截导入并将其换成可以测试的内容。

最新更新