Node.Js заглушка синона потока данных google не работает - PullRequest
0 голосов
/ 11 июля 2020

Вот моя функция, которая вызывает функцию потока данных Google

index. js

const { google } = require('googleapis');

const triggerDataflowJob = async (event, context) => {
  const auth = new google.auth.GoogleAuth({
    scopes: ['https://www.googleapis.com/auth/cloud-platform'],
  });
  const authClient = await auth.getClient();
  const projectId = await auth.getProjectId();

  const dataflow = google.dataflow({ version: 'v1b3', auth: authClient });
  const dataflowReqBody = dataflowRequest(projectId, event.bucket, event.name, context);
  return dataflow.projects.locations.templates.create(dataflowReqBody);
};

module.exports = { triggerDataflowJob };

Мой модульный тест для вышеуказанной функции

index.test. js

const { google } = require('googleapis');
const { triggerDataflowJob } = require('./index.js');

describe('Function: triggerDataflowJob', () => {
  it('should return success', async () => {
    const projectsStub = sinon.stub().returnsThis();
    const locationsStub = sinon.stub().returnsThis();

    const dataflowStub = sinon.stub(google, 'dataflow').callsFake(() => ({
      projects: projectsStub,
      locations: locationsStub,
      templates: sinon.stub(),
    }));

    const context = { eventId: '126348454' };
    const event = { bucket: 'test-bucket', name: 'test-file.json' };

    await triggerDataflowJob(event, context);
    sinon.assert.calledOnce(dataflowStub);
  });
});

Но я получаю ошибку ниже при запуске теста.

1) Trigger Dataflow Job:
       Function: triggerDataflowJob
         should return success:
     TypeError: Cannot read property 'templates' of undefined
      at triggerDataflowJob (index.js:12:38)
      at process._tickCallback (internal/process/next_tick.js:68:7)

Может кто-нибудь, пожалуйста, помогите, где проблема? или что я упускаю или делаю не так?

1 Ответ

0 голосов
/ 11 июля 2020

Судя по ошибке, похоже, что объект потока данных, который вы возвращаете, не имеет ключа шаблона в объекте местоположения.

Глядя на ваш тест, похоже, что объект потока данных выглядит примерно так:

const dataflow = {
   projects: {...},
   locations: {...},
   templates: {...}
}

В операторе return основной функции вы ищите шаблоны в локациях.

return dataflow.projects.locations.templates.create(dataflowReqBody);

Если у локаций есть ключ шаблонов, то вам может потребоваться обновить ваш тест и то, как вы издеваетесь над объектом. Если не предполагается наличие ключа шаблонов, вы можете обновить оператор возврата следующим образом:

return dataflow.projects.templates.create(dataflowReqBody);

Надеюсь, что это поможет!

...