使用 Jest 测试 Firebase 函数 - 错误:moduleName.split 不是函数

6 firebase jestjs google-cloud-functions

我正在尝试使用 firebase-functions-test SDK 测试 Firebase Cloud 函数...文档(通常)基于 mocha/sinon,但由于我的项目基于 Jest,我想改用 Jest。 ..

在文档中,他们声明 index.js 正在调用 admin.initializeApp ......我需要在导入我的函数之前存根它。

所以他们写道:

const test = require("firebase-functions-test");
const admin = require("firebase-admin");
adminInitStub = sinon.stub(admin, 'initializeApp');
myFunctions = require('../index');
Run Code Online (Sandbox Code Playgroud)

使用 Jest ,我尝试以这种方式模仿它:

const test = require("firebase-functions-test");
const admin = require("firebase-admin");
adminInitStub = jest.mock(admin, 'initializeApp');
myFunctions = require('../index');
Run Code Online (Sandbox Code Playgroud)

但我收到一个错误:

失败测试/index.spec.js 云函数?遇到声明异常(5ms)

  ? Cloud Functions › encountered a declaration exception

    TypeError: moduleName.split is not a function

      4 |
      5 | describe('Cloud Functions', () => {
    > 6 |   const adminInitStub = jest.mock(admin, "initializeApp");
        |                              ^
      7 |   const myFunctions = require('../index.js');
      8 |
      9 |   before(() => {

      at Resolver.resolveModuleFromDirIfExists (../node_modules/jest-resolve/build/index.js:187:30)
      at Suite.mock (tests/index.spec.js:6:30)
Run Code Online (Sandbox Code Playgroud)

我哪里错了?

小智 6

我认为的问题是误用了jest.mock功能,

此函数将用于模块,例如 'require' 或 import for ex:

jest.mock('fs');
Run Code Online (Sandbox Code Playgroud)

( https://jestjs.io/docs/en/manual-mocks )

你可能会将它与jest.fngenMockFunction()混淆


Sam*_*l N 0

虽然我无法准确指出您做错了什么,但我可以向您指出firebase-functions-test的单元测试功能文档。您可以运行那里的示例,或者免费预览我在 AngularFirebase 上找到的如何使用 Jest 测试 Firebase 云功能课程。我没有尝试过这个,因为我不在那个环境中开发,但我希望它有帮助。