如何用结果数组编写mocha测试?

时间:2016-06-28 15:49:29

标签: javascript unit-testing mocha supertest

我试图动态编写一个mocha测试,而不是为res.body.result中的每个项目写一个期望。我有这样的json响应:

{
  "ok": true,
  "result": {
    "year": "2000",
    "makes": [
      "Acura",
      "Audi",
      "BMW"
    ]
  }
}

而不是为每个品牌写这个:

describe('Decode VIN', function (){
    it('should return 200 response', function (done){
        api.get('/makes_year?year=2000')
            .set('Accept', 'application.json')
            .expect(200)
            .end(function(err, res) {
                expect(res.body.ok).to.equal(true)
                expect(res.body.result.year).to.equal("2000")
                expect(res.body.result.makes).to.equal("Acura")
                expect(res.body.result.makes).to.equal("Audi")
                done();
            })
    });
});

我如何迭代地进行此操作?

编辑:我尝试在describe语句中声明expectedMakes并将其声明。为简洁起见,这只是两者中的一个。

var expectedMakes = [
    "Acura",
    "Audi",
    "BMW"
];

describe('Makes By Year', function (){
    it('should return 200 response, body.ok, and an array of vehicle makes', function (done){
        api.get('/makes_year?year=2000')
            .set('Accept', 'application.json')
            .expect(200)
            .end(function(err, res) {
                expect(res.body.ok).to.equal(true)
                expect(res.body.result.year).to.equal("2000")
                expect(res.body.result.makes).to.equal(expectedMakes)
                done();
            })
    });
});

我得到了这个结果:

  Uncaught AssertionError: expected [ Array(37) ] to equal [ Array(37) ]
  + expected - actual

1 个答案:

答案 0 :(得分:0)

预期值位于测试中。一种方法是在测试中按预期存储所有makes并断言

var expectedMakes = [
   'Acura',
   'Audi',
   ... 
]
expect(res.body.result.makes).toEqual(expectedMakes)

这将断言列表严格相等,每个项目位于匹配位置expectedMakes