При вызове обещания в тесте получить ошибку 400 в NodeJS - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь использовать Contentful, новую библиотеку JS для создания статических веб-сайтов. Я хочу использовать его в Node JS.

Я создал такой файл приложения (имя getContent.js):

'use strict';

var contentful = require('contentful')


var client = contentful.createClient({
    space: '****',
    accessToken: '****' 
  });

module.exports = client;

function getEntry() {
  return client.getEntry('******')
  .then(function (entry) {
    // logs the entry metadata
    console.log(entry.sys)

    // logs the field with ID title
    console.log(entry.fields.channelName)
  })
}

Затем я создал тест (getContent.test.js), подобный этому:

'use strict';

let chai = require('chai');
let should = chai.should();
var expect = chai.expect;

var rewire = require("rewire");
let getContent = rewire("./getContent.js");

describe('Retreive existing', () => {
  it('it should succeed', (done) => {
    getContent.getEntry({contentName:'****'
    }, undefined, (err, result) => {
      try {
        expect(err).to.not.exist;
        expect(result).to.exist;
        // res.body.sould be equal
        done();
      } catch (error) {
        done(error);
      }
    });
  });
});

но я получаю эту ошибку:

Получить существующий (узел: 42572) UnhandledPromiseRejectionWarning: Ошибка: запрос не выполнен с кодом состояния 400 в createError (/Users/ire/Projects/SZDEMUX_GDPR/api/node_modules/contentful/dist/contentful.node.js:886:15) при расчете (/Users/ire/Projects/SZDEMUX_GDPR/api/node_modules/contentful/dist/contentful.node.js:1049:12) на IncomingMessage.handleStreamEnd (/Users/ire/Projects/SZDEMUX_GDPR/api/node_modules/contentful/dist/contentful.node.js:294:11) на emitNone (events.js: 111: 20) на IncomingMessage.emit (events.js: 208: 7) в endReadableNT (_stream_readable.js: 1064: 12) в _combinedTickCallback (внутренняя / process / next_tick.js: 138: 11) at process._tickCallback (internal / process / next_tick.js: 180: 9) (узел: 42572) UnhandledPromiseRejectionWarning: необработанное обещание отказ. Эта ошибка возникла из-за броска внутри асинхронного функционировать без блока catch или отклоняя обещание, которое было не обрабатывается с помощью .catch (). (идентификатор отклонения: 3) (узел: 42572) [DEP0018] DeprecationWarning: Отклонения необработанных обещаний устарели В будущее, обещания отклонения, которые не обрабатываются, прекратят Процесс Node.js с ненулевым кодом выхода.

Вы знаете, что мне не хватает? обещание в порядке, я уже проверил его с простым узлом getContent.js

1 Ответ

0 голосов
/ 07 мая 2018

Я вижу несколько проблем с вашим кодом:

1. Недействительные Args

В вашей тестовой функции в getContent.js вы передаете аргумент методу getEntry (возвращает client.getEntry ('******'), тогда как вы передаете объект в тесте (getContent. getEntry ({}))

2. Смешивание обещаний и обратных вызовов

it('it should succeed', (done) => {
  getContent.getEntry("****")
    .then((result) => {
      console.log(result);

      try {
        expect(result).to.exist;
        // res.body.sould be equal
        done();
      } catch (error) {
        done(error);
      }
    })
    .catch(error => {
      console.log(error);
      done(error)
    })
});

3. Источник отклонения необработанного обещания не ясен:

Это из вашей тестовой функции в getContent.js или из вашего реального теста?

Вероятно, это тоже может быть,

expect(err).to.not.exist;
expect(result).to.exist;

Всегда отлавливайте ошибки в Promises и отклоняйте их по уважительной причине, чтобы избежать подобных проблем.

Не могли бы вы обновить свой код и перепостить его, чтобы он был понятен другим пользователям?

...