我尝试使用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,我想看看测试是否在一个地方为每个端点传递。
如何为单个服务器调用创建多个测试?
答案 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");
});
});