2016-06-09 3 views
2

У меня есть тест, который выглядит следующим образом:Supertest Ожидать Не Утверждая Коды состояния Правильно

it('should fail to get deleted customer', function(done) { 
    request(app) 
     .get('/customers/'+newCustomerId) 
     .set('Authorization', 'Bearer ' + token) 
     .set('Accept', 'application/json') 
     .expect('Content-Type', /json/) 
     .expect(404, done) 
    }); 

Я прочитал документацию здесь:

https://github.com/visionmedia/supertest

Он говорит это:

обратите внимание, как вы можете пройти прямо к любому вызову .expect()

Строка кода, которая не работает, является .expect(404, done), если я изменю это как .expect(200, done), тогда тест не подведет.

Однако, если добавить конец так:

it('should fail to get deleted customer', function(done) { 
    request(app) 
     .get('/customers/'+newCustomerId) 
     .set('Authorization', 'Bearer ' + token) 
     .set('Accept', 'application/json') 
     .expect('Content-Type', /json/) 
     .expect(200) 
     .end(function(err, res) { 
      if (err) console.log(err); 
      done(); 
     }); 
    }); 

Тогда тест не пройден. Почему .expect(200, done) не терпит неудачу?

ответ

0

Это как и ожидалось, согласно документации. (https://github.com/visionmedia/supertest)

Если вы используете метод .end() .expect() утверждений, которые не не выбросит - они вернутся утверждение как ошибка в .end() обратного вызова. Чтобы не выполнить тестовый пример, вам нужно будет перестроить или передать err на done()

Когда вы делаете свои утверждения синхронно, это ваша обязанность обрабатывать ошибки вручную. В вашем первом фрагменте кода .expect(404, done) никогда не запускается, потому что исключение было выброшено до того, как оно попало туда.

Ваш второй фрагмент не работает должным образом, поскольку он способен обрабатывать ошибку. Поскольку ошибка была передана обработчику function(err, res) {}.

Я нахожу это громоздким и почти обреченным на провал, чтобы обрабатывать ошибки таким образом. Таким образом, лучше всего использовать обещание, так что ошибки могут быть обработаны автоматически следующим образом:

it('should fail to get deleted customer', function() { 
    return request(app) 
    .get('/customers/'+newCustomerId) 
    .set('Authorization', 'Bearer ' + token) 
    .set('Accept', 'application/json') 
    .expect('Content-Type', /json/) 
    .expect(200); 
}); 
+0

Спасибо за ответ, это было нарушение в изменении в 2.0.0: https://github.com/ visionmedia/Supertest/вопросы/345 # issuecomment-229496425 –

 Смежные вопросы

  • Нет связанных вопросов^_^