2013-12-03 2 views
1

Я использую Express.js и Jasmine-node для тестов. Этот код моего сервера:Почему этот тест с жасминовым узлом не проходит?

var express = require('express'); 
var app = express(); 

app.get('/', function (request, response) { 
    response.send("Bonjour!"); 
}); 

module.exports = app; 

и это испытание:

var request = require('http'); 
var app = require('../src/app'); 
var server; 

describe('textreader', function(){ 

    beforeEach(function(done){ 
    server = app.listen(3333, function (err, result) { 
     if (err) { 
     done(err); 
     } else { 
     done(); 
     } 
    }); 
    }); 

    afterEach(function(){ 
    server.close(); 
    }); 

    it('responds to /', function(){ 
     request.get("http://localhost:3333", function(response){ 
     console.log(response.body); 
     expect(response.body).toEqual('foo'); 
     }); 
    }); 

}); 

Это выход:

[email protected]:~/projects/textreader☺ grunt 
Running "jshint:files" (jshint) task 
>> 3 files lint free. 

Running "jasmine_node" task 

textreader 
    responds to/

Finished in 1.218 seconds 
1 test, 0 assertions, 0 failures, 0 skipped 

Done, without errors. 

Поэтому очевидно, что этот тест должен терпеть неудачу, так как сервер может производить только текст «Bonjour!». Во-вторых, console.log не производит никакого вывода.

Что мне нужно сделать, чтобы этот тест не прошел должным образом?

+1

Пожалуйста, подумайте об отрицании названия; как сейчас, это в конечном счете правильно, но сбивает с толку. – 11684

+2

Он не проходит (или не работает), он не запускается вообще («0 утверждений»). См. [Документация] (http://pivotal.github.io/jasmine/#section-Asynchronous_Support) о том, как запускать асинхронные тесты. – JJJ

ответ

1

Ваш пример близок к тому, что находится на странице jasmine-node, описывающей асинхронные тесты.

Вам нужно добавить done(), чтобы тест мог знать, чтобы подождать 500 мс (по умолчанию) для завершения транзакции (или вместо этого отобразить ошибку тайм-аута). Ваш код будет выглядеть примерно так:

it('responds to /', function(){ 
     request.get("http://localhost:3333", function(response){ 
     console.log(response.body); 
     expect(response.body).toEqual('foo'); 
     done(); 
     }); 
    }); 
+2

Кроме того, как раз для записи, оказывается, что ответ не имеет метода «тело». Я переключился на использование библиотеки «запросов», которая, похоже, гораздо приятнее иметь дело: https://npmjs.org/package/request – mikewilliamson