Тестирование функции Firebase с помощью Jest - ошибка: moduleName.split не является функцией - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь протестировать функцию Firebase Cloud с помощью пакета Firebase-functions-test SDK ... Документация (как часто) основана на 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');

Используя Jest, я попытался имитировать это следующим образом:

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

, но получаю ошибку:

FAIL tests / index.spec.js CloudФункции ✕ обнаружил объявление, исключающее (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 голосов
/ 31 января 2019

Вместо jest.mock(...) используйте jest.spyOn.Вот так:

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

Дополнительная информация о jest.spyOn

0 голосов
/ 01 декабря 2018

Спасибо, Сэмюэль ... Я прочитал пример, поскольку я упоминал, что он использует Мокко ... а в Angular он не дает никакой информации о насмешках над шутками ..

0 голосов
/ 23 января 2019

Проблема, которую я считаю, заключается в неправильном использовании функции jest.mock ,

, эта функция должна использоваться в модуле, например, 'require' или import для ex:

jest.mock('fs');

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

вы можете спутать его с jest.fn или genMockFunction ()

0 голосов
/ 01 декабря 2018

Хотя я не могу точно указать, что вы делаете неправильно, я могу указать вам на документацию по функциям модульного тестирования для firebase-functions-test .Вы можете просмотреть этот пример или бесплатно просмотреть Как протестировать облачные функции Firebase с помощью урока Jest , который я нашел на AngularFirebase.Я не пробовал это, так как не развиваюсь в этой среде, но надеюсь, что это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...