我想在我的应用程序中对一个调用和更新Firebase引用的函数进行单元测试。我面临的问题是,当我尝试运行测试并导入包含该函数的文件时,我收到以下错误SyntaxError: Unexpected token u in JSON at position 0
,该错误指向我的函数文件中导入我对Firebase的引用的行。 / p>
我在这个项目中使用Webpack和Babel,所以我尝试在webpack.config文件中设置一个resolve.alias
,该文件在应用程序运行时起作用,但在我运行npm test
时不起作用。在这一点上,我不知道如何模拟Firebase参考,所以我可以测试该函数的其他功能。这是一些示例代码:
import firebase from 'firebase';
const firebaseConfig = JSON.parse(unescape(`${config.FIREBASE_CONFIG}`));
const mainApp = firebase.initializeApp(firebaseConfig);
export const ref = mainApp.database().ref();
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 }));
});
};
答案 0 :(得分:0)
你使用Qunit,jasmine,mocha的测试框架是什么?使用AngularFire和Angular它更容易,因为你可以在DI中传递一个模拟类,但我也测试了服务器端的非角度js。然后我使用Sinon来获取mock initializeApp并返回一个Mock firebase应用程序。
您也可以尝试https://github.com/thlorenz/proxyquire我不需要走那么远,但我已经看过它了。这样你基本上可以拦截导入并将其换成可以测试的东西。