2014-11-24 9 views
5

Używam czegoś bardzo podobnego do poniższego, aby wykonać serię testów API przy użyciu Mocha. To jest świetne, ale wymaga osobnego wywołania API dla każdego testu. Chcę użyć tego samego wywołania interfejsu API i uruchomić wiele testów przeciwko tej odpowiedzi. Czytałem, że można użyć do tego celu before, ale żaden z przykładów w Internecie nie pokazuje, że działa z wywołaniami API?Node.js + Chai/Mocha/Powinien: przeprowadzić wiele testów przeciwko tej samej odpowiedzi

var chai = require('chai'); 
var request = require('request'); 
var async = require('async'); 
var assert = chai.assert, 
    expect = chai.expect, 
    should = chai.should(); 

describe('/', function() { 
    it('should return 200', function (done) { 
    request.get('http://localhost:8000', function (err, res, body) { 
     res.should.have.status(200); 
     done(); 
    }); 
    }); 

    it('should say "Hello, world!"', function (done) { 
    request.get('http://localhost:8000', function (err, res, body) { 
     body.should.have.property('type', 'aType'); 
     done(); 
    }); 
    }); 
}); 

Odpowiedz

5

Można to zrobić za pomocą funkcji before jak tak ...

var chai = require('chai'); 
var request = require('request'); 
var async = require('async'); 
var assert = chai.assert, 
    expect = chai.expect, 
    should = chai.should(); 

describe('/', function() { 
    var firstRequest; 

    before(function(done) { 
    request.get('http://localhost:8000', function(err, res, body) { 
     firstRequest = { 
     err:err, 
     res:res, 
     body:body 
     }; 
     done(); 
    }); 
    }); 

    it('should return 200', function (done) { 
    firstRequest.res.should.have.status(200); 
    done(); 
    }); 

    it('should say "Hello, world!"', function (done) { 
    firstRequest.body.should.have.property('type','aType'); 
    done(); 
    }); 
}); 

Jednakże, chyba że masz bardzo dobry powód, aby to zrobić, myślę, że jesteś lepiej po prostu łącząc testy.

var chai = require('chai'); 
var request = require('request'); 
var async = require('async'); 
var assert = chai.assert, 
    expect = chai.expect, 
    should = chai.should(); 

describe('/', function() { 
    it('should return 200 and say "Hello, world!"', function (done) { 
    request.get('http://localhost:8000', function (err, res, body) { 
     res.should.have.status(200); 
     body.should.have.property('type', 'aType'); 
     done(); 
    }); 
    }); 
}); 

Jeśli test się nie powiedzie Mocha zgłosi konkretny powód, dla którego nie udało się go wykonać, mimo że istnieją dwa twierdzenia.

+0

Pomyślałem o zrobieniu tego, ale kiedy mam 10 lub więcej twierdzeń o ciele, to robi się naprawdę brzydko, próbując opisać, co się dzieje. Miał nadzieję mieć czystą listę testów z rzędu z odpowiednimi opisami. – brandonscript

+0

Dziwne 'should.have.status' nie wydaje się ładnie grać w ten sposób - nie wiem dlaczego. Mam nadzieję, że rozumiem to lol! – brandonscript

+0

Tylko jedna aktualizacja: nie musisz 'done' na testach, jeśli tylko sprawdzasz odpowiedź. Nie ma nic asynchronicznego w klauzulach 'it()' w twoim pierwszym przykładzie. – deitch

Powiązane problemy