2014-11-24 79 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

相关问题