Проверьте, была ли вызвана функция-заглушка с помощью программы sinon spy - PullRequest
0 голосов
/ 10 февраля 2020

Я использую firebase admin, и я пытаюсь написать некоторые модульные тесты для моего кода.

Поскольку в мою функцию введено admin, я решил, что могу смоделировать очень простой объект, подобный этому:

admin = { 
  get auth () {
    return {
      updateUser: () => {
        return true;
      },
      createUser: () => {
        return true;
      },
      getUser: () => {
        throw Error('no user');
      }
    };
  }
};

Тогда в конкретном тесте я могу заглушить функции. Вот что я сделал до сих пор:

// stubbed functions
sinon.stub(admin, 'auth').get(() => () => ({
  updateUser: () => ({ called: true }),
  getUser: () => (userRecord),
  createUser: () => ({ called: false })
}));

и они работают нормально (я вижу по моим журналам).

Однако в моем тесте я также хотел бы проверить, если createUser был вызван вообще. Я думал, что смогу настроить шпиона на функцию createUser, но пока я не могу заставить его работать.

Вот то, что я пытался (с кучей вариантов, всегда терпящих неудачу) :

it.only('should update a user', async () => {
  const userRecord = mockData

  sinon.stub(admin, 'auth').get(() => () => ({
    updateUser: () => ({ called: true }),
    getUser: () => (userRecord),
    createUser: () => ({ called: false })
  }));
  const spy = sinon.spy(admin, 'auth', ['get']); // this is not working

  const user = await upsertUser(data, firestore, admin);
  expect(user).toEqual(data.userDataForAuth); // this one is ok
  sinon.assert.calledOnce(spy.get); // this throws an error
});

бит кода, который я пытаюсь проверить (это upsert function это:

  // in my test exisiting user is not null (the stub `getUser` is returning a object
  if (existingUser != null) {
    try {
      await admin.auth().updateUser(uid, userDataForAuth);
      return userDataForAuth;
    } catch (error) {
      console.log('error', error);
      throw Error('error updating user');
    }
  }

Я даже не уверен, что это лучший подход, счастливый изменить его, если есть лучший!

...