如何对依赖于Firebase参考的功能进行单元测试?

时间:2017-03-23 22:22:35

标签: javascript node.js firebase webpack babel

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

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

常量/ index.js

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

const mainApp = firebase.initializeApp(firebaseConfig);

export const ref = mainApp.database().ref();

动作/ settings.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 }));
      });
  };

1 个答案:

答案 0 :(得分:0)

你使用Qunit,jasmine,mocha的测试框架是什么?使用AngularFire和Angular它更容易,因为你可以在DI中传递一个模拟类,但我也测试了服务器端的非角度js。然后我使用Sinon来获取mock initializeApp并返回一个Mock firebase应用程序。

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