const request = require('supertest');
const server = request('http://localhost:9001');
describe('Get /static/component-list.json', function() {
const api = server.get('/static/component-list.json');
it('should response a json', function(done) {
api.expect('Content-Type', /json/, done);
});
it('200', function(done) {
api.expect(200, done); // This will failed
// server.get('/static/component-list.json').expect(200, done); // This will successed
});
});
在第二个测试用例中重用api
时,mocha将引发错误:
mocha test/api
命令的结果:
如何申请网址一次并在多个it
案例中使用。
答案 0 :(得分:3)
您必须为要运行的每个测试(每个it
)创建一个新请求。您不能为多个测试重复使用相同的请求。所以
describe('Get /static/component-list.json', function() {
let api;
beforeEach(() => {
api = server.get('/static/component-list.json');
});
或者,如果您想减少请求的数量,请将对请求的所有检查合并到一个Mocha测试中。
如果您查看supertest
的代码,则see当您使用回调呼叫expect
方法时,expect
会自动调用{{1} }}。所以这个:
end
相当于:
api.expect('Content-Type', /json/, done);
api.expect('Content-Type', /json/).end(done);
方法由superagent
提供,end
用于执行请求。 supertest
方法启动了请求。这意味着您已完成设置请求并希望立即将其关闭。
end
method调用request
method,其任务是使用Node的网络机制来生成用于执行网络操作的Node请求对象。 问题是end
缓存节点请求产生但该节点请求对象不可重用。因此最终,request
或superagent
请求无法结束两次。您必须重新发出每次测试的请求。
(您可以通过执行supertest
手动刷新测试之间的缓存对象。但我强烈建议不要这样做。首先,无论您认为自己获得的任何优化都是最小的因为网络请求仍然需要重新制作。其次,这相当于弄乱api.req = undefined
的内部。它可能会破坏未来的版本。第三,可能还有其他变量可能需要保持状态与superagent
一起重置。)