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

时间:2018-11-30 15:25:12

标签: firebase google-cloud-functions jestjs

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

在文档中,他们指出index.js正在调用admin.initializeApp ...在导入函数之前,我需要对它进行存根处理。

所以他们写:

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

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

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

但是我得到一个错误:

失败测试/index.spec.js       云功能         ✕遇到声明异常(5毫秒)

  ● 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)

我在哪里错了?

4 个答案:

答案 0 :(得分:0)

虽然我不能确切指出您在做什么错,但可以将您引向firebase-functions-test的单元测试功能文档。您可以在那里浏览示例,也可以在AngularFirebase上找到免费的预览How to Test Firebase Cloud Functions With Jest课程。我没有尝试过,因为我不在那种环境中进行开发,但是我希望它会有所帮助。

答案 1 :(得分:0)

感谢Samuel ...我读了这个示例,因为我提到它使用了Mocha ...,而在Angular中,它没有提供关于开玩笑的任何信息。

答案 2 :(得分:0)

我认为问题是 jest.mock 函数的误用

此功能将在模块上使用,例如'require'或import for ex:

jest.mock('fs');

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

您可能将其与 jest.fn genMockFunction()

混淆了

答案 3 :(得分:0)

相反,jest.mock(...)使用jest.spyOn。像这样:

adminStub = jest.spyOn(admin, "initializeApp");

有关jest.spyOn的更多信息