摩卡:多个"它"单个服务器请求中的呼叫

时间:2016-07-06 17:37:17

标签: javascript testing mocha

我尝试使用Mocha测试40多个API端点。我想作为单个服务器调用的一部分执行一些子测试。

例如,我想测试it('returns valid JSON...it('returns a valid status code...等等。

configs.forEach(function(config) {

    describe(config.endpoint, () => {

        it('...', function(done) {
            server
                .post(config.endpoint)
                .send({})
                .expect('Content-type', /json/)
                .expect(200)
                .end(function(err, res) {

                    //it('has a proper status code', () => {
                    expect(res.status).toEqual(200);
                    //})

                    //it('does not have an error object', () => {
                    expect(res.body.hasOwnProperty('error')).toEqual(false);
                    //})

                    done();
                })
        })

    })

})

问题是我无法嵌套it语句,但我依靠回调,通过done()来指示何时收到响应,所以我必须将调用包装在{ {1}}陈述......

因为其中一些请求需要半秒才能解决,而且其中有40多个请求,我 想要为这些请求创建单独的测试。创建单独的测试也会复制config.endpoint,我想看看测试是否在一个地方为每个端点传递。

如何为单个服务器调用创建多个测试?

2 个答案:

答案 0 :(得分:0)

    configs.forEach(function(config) {

        describe(config.endpoint, () => {

            var response;    
            it('...', function(done) {
                server
                    .post(config.endpoint)
                    .send({})
                    .expect('Content-type', /json/)
                    .expect(200)
                    .end(function(err, res) {
                          response=res;
                          done();  
                      })
             });

                    it('has a proper status code', () => {
                          expect(response.status).toEqual(200);
                    })

                    it('does not have an error object', () => {
                            expect(response.body.hasOwnProperty('error')).toEqual(false);
                    })

         })
})

这个怎么样? 我不确定测试用例的嵌套,但它适用于你。

答案 1 :(得分:0)

这是我使用摩卡(mocha),柴(chai)和超级测试(API请求)完成此任务的方式:

import { expect } from "chai"

const supertest = require("supertest");
const BASE_URL = process.env.API_BASE_URL || "https://my.api.com/";
let api = supertest(BASE_URL);

describe("Here is a set of tests that wait for an API response before running.", function() {

  //Define error & response in the 'describe' scope. 
  let error, response;

  //Async stuff happens in the before statement.
  before(function(done) {
    api.get("/dishes").end(function(err, resp) {
      error = err, response = resp;
      done();
    });
  });

  it("should return a success message", function() {
    console.log("I have access to the response & error objects here!", response, error);
    expect(response.statusCode).to.equal(200);
  });

  it("should return an array of foos", function() {
    expect(response.body.data.foo).to.be.an("array");
  });
});