2014-11-24 46 views
5

我正在使用與以下內容非常相似的內容來使用Mocha執行一系列API測試。這很好,但它需要爲每個測試製作一個單獨的API調用。 我想使用相同的API調用並針對該響應運行多個測試。我一直在閱讀,你可以使用before來做到這一點,但是網絡上的所有例子都沒有真正顯示它使用API​​調用?Node.js + Chai/Mocha /應該:針對相同的響應運行多個測試

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(); 
    }); 
    }); 
}); 

回答

5

你可以用像這樣一個before功能做到這一點...

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(); 
    }); 
}); 

但是,除非你有一個很好的理由要做到這一點,我覺得你最好還是先結合試驗。

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(); 
    }); 
    }); 
}); 

如果測試失敗爲什麼會失敗,即使有兩個斷言摩卡將報告具體原因。

+0

思考這樣做,但是當我有10個左右的體斷言,那麼它變得非常難看試圖描述發生了什麼事情。希望能夠在適用的描述中連續列出一連串的測試。 – brandonscript 2014-11-24 02:18:05

+0

奇怪的'should.have.status'似乎不能很好地這樣做 - 不知道爲什麼。希望我能想出來哈哈! – brandonscript 2014-11-24 02:43:11

+0

只要一更新:如果你只是檢查響應你不需要在測試'done'。在你的第一個例子中'it()'子句中沒有異步。 – deitch 2014-11-24 13:38:22

相關問題