Записать тело ответа на ошибки теста мокко? - PullRequest
0 голосов
/ 12 января 2019

При запуске тестов мокко с использованием npm run test возможно ли распечатывать содержимое тела ответа при неудачном завершении теста?

chai.request(server)
  .post('/')
  .set('X-Access-Token', testUser.accessToken)
  .send(fields)
  .end((error, response) => {
    console.log(response.body);       // log this!
    response.should.have.status(201); // if this fails!
    done();
  });
});

Другими словами, может ли функция afterEach иметь доступ к error и response для каждого теста?

afterEach(function(error, response) {
  if (error) console.log('afterEach', response.body);
});

В ответ приходят полезные сообщения об ошибках, поэтому мы вставляем эту строку console.log в неудачный тест для отладки. Было бы хорошо всегда видеть response.body на каждую ошибку.

1 Ответ

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

ОП здесь - я придумал ответ и решил, что оставлю его здесь, пока кто-нибудь не придумает лучший.

Причина, по которой он не идеален, заключается в том, что в каждом тесте требуется одна строка, которая обновляет общую переменную currentResponse в ответ на этот тест. Но если ваши тесты охватывают много файлов, вы можете сохранить глобальную переменную в вашем скрипте установки:

// you can use a global variable if tests span many files
let currentResponse = null; 

afterEach(function() {
  const errorBody = currentResponse && currentResponse.body;

  if (this.currentTest.state === 'failed' && errorBody) {
    console.log(errorBody);
  }

  currentResponse = null;
});

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

describe('POST /interests', () => {
  it('400s if categoryName field is not present in the category', done => {
    const fields = [
      { language: 'en' },
    ];

    chai.request(server)
      .post('/interests')
      .set('X-Access-Token', testUser.accessToken)
      .send(fields)
      .end((error, response) => {
        currentResponse = response; // update it here
        response.should.have.status(400);
        done();
      });
  });

И это будет выводить ответ при возникновении ошибки, чтобы вы могли видеть, что возвратил сервер.

...