Firebase VueJs Mocha单元测试运行时异常引用错误:未定义IDBIndex
我有一个集成了firebase的VueJs应用程序,我正在尝试使用Mocha测试我的组件。当firebase不是组件中的依赖项时,测试将通过。当我引入firebase时,在运行单元测试时会出现以下错误Firebase VueJs Mocha单元测试运行时异常引用错误:未定义IDBIndex,firebase,unit-testing,vue.js,mocha.js,Firebase,Unit Testing,Vue.js,Mocha.js,我有一个集成了firebase的VueJs应用程序,我正在尝试使用Mocha测试我的组件。当firebase不是组件中的依赖项时,测试将通过。当我引入firebase时,在运行单元测试时会出现以下错误 $ vue-cli-service test:unit WEBPACK Compiling... DONE Compiled successfully in 1916ms WEBPACK Compiled successfully in 1916ms MOCHA Testi
$ vue-cli-service test:unit
WEBPACK Compiling...
DONE Compiled successfully in 1916ms
WEBPACK Compiled successfully in 1916ms
MOCHA Testing...
RUNTIME EXCEPTION Exception occurred while loading your tests
ReferenceError: IDBIndex is not defined
at Module../node_modules/idb/lib/idb.mjs (....myapp-web/dist/webpack:/node_modules/idb/lib/idb.mjs:87:1)
at __webpack_require__ (....myapp-web/dist/webpack:/webpack/bootstrap:19:1)
at Module../node_modules/@firebase/installations/dist/index.esm.js (....myapp-web/dist/webpack:/node_modules/@firebase/installations/dist/index.esm.js:1:1)
at __webpack_require__ (....myapp-web/dist/webpack:/webpack/bootstrap:19:1)
at Module../node_modules/@firebase/performance/dist/index.esm.js (....myapp-web/dist/webpack:/node_modules/@firebase/performance/dist/index.esm.js:1:1)
at __webpack_require__ (....myapp-web/dist/webpack:/webpack/bootstrap:19:1)
at Module../node_modules/firebase/dist/index.esm.js (....myapp-web/dist/webpack:/node_modules/firebase/dist/index.esm.js:1:1)
at __webpack_require__ (....myapp-web/dist/webpack:/webpack/bootstrap:19:1)
at Module../src/firebaseConfig.js (....myapp-web/dist/webpack:/src/firebaseConfig.js:1:1)
at __webpack_require__ (....myapp-web/dist/webpack:/webpack/bootstrap:19:1)
at Module../tests/unit/loginTest.spec.js (....myapp-web/dist/webpack:/tests/unit/loginTest.spec.js:5:1)
at __webpack_require__ (....myapp-web/dist/webpack:/webpack/bootstrap:19:1)
at run (....myapp-web/dist/webpack:/node_modules/mocha-webpack/lib/entry.js:3:1)
at Array.forEach (<anonymous>)
at Object../node_modules/mocha-webpack/lib/entry.js (....myapp-web/dist/webpack:/node_modules/mocha-webpack/lib/entry.js:10:1)
at __webpack_require__ (....myapp-web/dist/webpack:/webpack/bootstrap:19:1)
at ....myapp-web/dist/webpack:/webpack/bootstrap:83:1
at Object.<anonymous> (....myapp-web/dist/main.js:87:10)
at Module._compile (internal/modules/cjs/loader.js:759:30)
at Object._module2.default._extensions.<computed> [as .js] (....myapp-web/node_modules/mocha-webpack/lib/util/registerRequireHook.js:148:12)
at Module.load (internal/modules/cjs/loader.js:628:32)
at Function.Module._load (internal/modules/cjs/loader.js:555:12)
at Module.require (internal/modules/cjs/loader.js:666:19)
at require (internal/modules/cjs/helpers.js:16:16)
at ....myapp-web/node_modules/mocha/lib/mocha.js:334:36
at Array.forEach (<anonymous>)
at Mocha.loadFiles (....myapp-web/node_modules/mocha/lib/mocha.js:331:14)
at Mocha.run (....myapp-web/node_modules/mocha/lib/mocha.js:811:10)
at ....myapp-web/node_modules/mocha-webpack/lib/runner/TestRunner.js:191:27
at ....myapp-web/node_modules/mocha-webpack/lib/webpack/compiler/registerReadyCallback.js:26:7
at AsyncSeriesHook.eval [as callAsync] (eval at create (....myapp-web/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:36:1)
at AsyncSeriesHook.lazyCompileHook (....myapp-web/node_modules/tapable/lib/Hook.js:154:20)
at ....myapp-web/node_modules/webpack/lib/Compiler.js:304:22
at Compiler.emitRecords (....myapp-web/node_modules/webpack/lib/Compiler.js:489:39)
at ....myapp-web/node_modules/webpack/lib/Compiler.js:298:10
at ....myapp-web/node_modules/webpack/lib/Compiler.js:475:14
at eval (eval at create (....myapp-web/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:11:1)
at callback (....myapp-web/node_modules/copy-webpack-plugin/dist/index.js:126:17)
at afterEmit (....myapp-web/node_modules/copy-webpack-plugin/dist/index.js:220:13)
at AsyncSeriesHook.eval [as callAsync] (eval at create (....myapp-web/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:7:1)
at AsyncSeriesHook.lazyCompileHook (....myapp-web/node_modules/tapable/lib/Hook.js:154:20)
at ....myapp-web/node_modules/webpack/lib/Compiler.js:472:27
at ....myapp-web/node_modules/neo-async/async.js:2818:7
at done (....myapp-web/node_modules/neo-async/async.js:3522:9)
at AsyncSeriesHook.eval [as callAsync] (eval at create (....myapp-web/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:6:1)
at ....myapp-web/node_modules/webpack/lib/Compiler.js:454:33
at MemoryFileSystem.writeFile (....myapp-web/node_modules/memory-fs/lib/MemoryFileSystem.js:328:9)
at writeOut (....myapp-web/node_modules/webpack/lib/Compiler.js:452:30)
at ....myapp-web/node_modules/webpack/lib/Compiler.js:466:7
at objectIteratorWithKey (....myapp-web/node_modules/neo-async/async.js:3509:9)
at timesSync (....myapp-web/node_modules/neo-async/async.js:2297:7)
at Object.eachLimit (....myapp-web/node_modules/neo-async/async.js:3463:5)
at emitFiles (....myapp-web/node_modules/webpack/lib/Compiler.js:358:13)
at Immediate._onImmediate (....myapp-web/node_modules/memory-fs/lib/MemoryFileSystem.js:288:4)
at processImmediate (internal/timers.js:439:21)
ERROR mocha-webpack exited with code 1.
Total task duration: 3.9s
我尝试了许多不同的解决方案来修改vue.config.js文件,以根据其他人的建议更改某些节点模块配置,但仍然没有成功。请让我知道,如果我需要提供任何其他反馈或澄清文件
非常感谢您的帮助。希望它很简单,我只是犯了一个愚蠢的错误。也许firebase需要一个浏览器才能运行(我从名称IDBIndex猜测),而mocha没有提供。你现在正在设置测试吗?也许你可以在浏览器上使用karma或jest。我其实不希望firebase运行。我只想把它存根。即使当我试图存根它,我仍然得到这个错误。我似乎不明白为什么会出现错误。你试过完整装载而不是浅装载吗?ShallowMount被认为是存根依赖项,但我遇到过不得不d挂载的情况。从堆栈跟踪来看,它似乎仍在尝试加载firebase。你试过开玩笑吗?@Scornwell我试过坐骑而不是浅水山,但没有成功。我感谢你的建议。
loginTest.spec.js
import { expect } from 'chai';
import { shallowMount } from '@vue/test-utils';
import sinon from 'sinon';
import Login from '../../src/components/Login';
const fb = require('../../src/firebaseConfig');
describe('Login.vue', () => {
it('Expect login email field to have default value.', () => {
const wrapper = shallowMount(Login);
sinon.stub(fb.auth(), 'signInWithEmailAndPassword', () => {});
expect(wrapper.find('#email1').text())
.to()
.be('you@email.com');
});
});