@Richswitch
junior

Как написать тест для этого resolver?

Привет!
Использую пишу модульные тесты для резолверов GraphQl, к БД подключаюсь с помощью Sequelize, тесты пишу с помощью Jest.

Как написать тест для резольвера с промисом ?
resolver
…
  updateUser(root, { id, input }) {
    return models.UserModel.findById(id)              // Ищем User в БД по ID
      .then(user => user.update(input));                   // Добавляем объект с новыми значениями
  }
…

Мой тест:
…
  it('update User', () => {
    return Mutation.updateUser(null, {
      currentId,                                          // currentId  = текущий ID юзера 
      input: {
        login: 'T-Jane',
        homeFloor: 2,
        avatarUrl: 'http://pic.com/2',
      },
    })
      .then((result) => {
        return console.log(result);
      });
  });
…


Ошибка которую я получаю в консоли:
TypeError: Cannot read property 'update' of null

       7 |   updateUser(root, { id, input }) {
       8 |     return models.UserModel.findById(id)
    >  9 |       .then(user => user.update(input));
      10 |   },
      11 |   removeUser(root, { id }) {
      12 |     return models.UserModel.findById(id)

      at models.UserModel.findById.then.user (graphql/resolvers/mutation.js:9:23)
      at tryCatcher (node_modules/bluebird/js/release/util.js:16:23)
      at Promise._settlePromiseFromHandler (node_modules/bluebird/js/release/promise.js:512:31)
      at Promise._settlePromise (node_modules/bluebird/js/release/promise.js:569:18)
      at Promise._settlePromiseCtx (node_modules/bluebird/js/release/promise.js:606:10)
      at Async.Object.<anonymous>.Async._drainQueue (node_modules/bluebird/js/release/async.js:138:12)
      at Async.Object.<anonymous>.Async._drainQueues (node_modules/bluebird/js/release/async.js:143:10)
      at Immediate.Async.drainQueues [as _onImmediate] (node_modules/bluebird/js/release/async.js:17:14)

Как я понимаю, тест видит строку сreturn models.UserModel.findById(id) и возвращает результат update null.

Есть документация на эту тему, но я не совсем не понял что там да как, ибо промисы для меня тема новая. Вот ссылка на документацию Jest на тему промисов

Всем спасибо за ответы!)
Давайте советы!
  • Вопрос задан
  • 135 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
summer Ярославль
от 100 000 до 140 000 ₽
КРАФТТЕК Санкт-Петербург
от 60 000 до 80 000 ₽
19 апр. 2024, в 20:43
20000 руб./за проект
19 апр. 2024, в 20:11
500 руб./за проект