2015-06-27 4 views
0

Я использую Jasmine 2.3.1. Следующие спецификации результатов выполнения в методе Afterall не вызывается:Жасмин afterAll не вызывается, когда возникает ошибка

var http = require('http'); 

describe("simple server tests:", function() { 

    afterAll(function(done) { 
     console.log('after all'); 
    }); 

    it("throws an error because server is not running", function(done) { 
     http.get("http://127.0.0.1:8080", function(res) { 
      res.on('data', function(data) { 
       done(); 
      }); 
     }); 
    }); 
}); 

Консоль показывает:

[23:25:24] Starting 'test'... 
events.js:85 
     throw er; // Unhandled 'error' event 
      ^
Error: connect ECONNREFUSED 
    at exports._errnoException (util.js:746:11) 
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1010:19) 

Мое ожидание было бы, что Afterall называется, независимо от ошибки, брошенной в методе испытаний , Я действительно не хочу пытаться поймать мои тесты. Пожалуйста, дайте мне знать, если это проблема с Жасмин или мое использование Жасмина. Благодарю.

ответ

0

afterAll вызывается, когда все спецификации завершены, но сервер вашей ситуации не работает, и в результате done() никогда не вызывается. Если вы проверяете, что сервер не работает, я хотел бы предложить, чтобы добавить обработчик ошибок для запроса и выполнить done() внутри него:

var http = require('http'); 

describe("simple server tests:", function() { 

    afterAll(function(done) { 
     console.log('after all'); 
     done(); // do not forget to execute done if you use it 
    }); 

    it("throws an error because server is not running", function(done) { 

     http.get("http://127.0.0.1:8080", function(res) { 
      res.on('data', function(data) { 
       // never called 
      }) 
     }).on('error', function(e) { 
      console.log("Got error: " + e.message); 
      done(); // finish async test 
     }); 
    }); 
}); 
+0

если сделано не называется, то я бы ожидать тайм-аут и метод Afterall быть вызванным. Проблема, я имею его, что любой тест может потерпеть неудачу с синтаксической ошибкой или неожиданной ошибкой. И в этих случаях afterall не называется. Я ожидал бы, что после этого будет вызван во всех случаях, даже когда будет выброшена ошибка. – planetjones

+1

Он выходит из-за исключения из-за асинхронного поведения тестируемого устройства. Жасмин ловит исключения синхронизации, но не async, потому что они отсутствуют, если это область видимости. Вы можете попробовать даже 'setTimeout (function() {a = b;}, 500);' и получить 'ReferenceError' с выходом тестового набора. Ничего не улавливает это исключение, поэтому вся сюита идет вниз. Очевидно, что если сюита не работает, то «afterAll» не может быть вызван. Я должен быть [известной проблемой] (https://github.com/jasmine/jasmine/issues/529) –

+0

Возможно, этот модуль может помочь вам - [jasmine-async-errors] (https: //www.npmjs. ком/пакет/жасмин Асинхр-ошибка). –

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

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