mocha:不能对多个 `it` 测试使用一个请求
mocha: can't use one request for mutlple `it` test
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
命令的结果:
如何请求 url 一次并在多个 it
情况下使用。
解决方案
您必须为您想要 运行 的每个测试(每个 it
)创建一个新请求。您不能对多个测试重复使用相同的请求。所以
describe('Get /static/component-list.json', function() {
let api;
beforeEach(() => {
api = server.get('/static/component-list.json');
});
或者,如果您想减少发出的请求数量,则将您对请求的所有检查合并到一个 Mocha 测试中。
说明
如果您查看 supertest
的代码,您会 see 当您调用带有回调的 expect
方法时,expect
调用会自动调用 end
。所以这个:
api.expect('Content-Type', /json/, done);
相当于:
api.expect('Content-Type', /json/).end(done);
end
方法由 superagent
提供,这是 supertest
用来执行请求的方法。 end
方法是启动请求的方法。这意味着您已完成请求设置,现在想将其关闭。
end
method calls the request
method,其任务是使用 Node 的网络机制生成用于执行网络操作的 Node 请求对象。 问题是 request
缓存了生成的节点请求,但此节点请求对象不可重用。 所以最终,superagent
或 supertest
请求不能结束两次。您必须为每个测试重新发出请求。
(您可以通过执行 api.req = undefined
在测试之间手动刷新缓存的对象。但我强烈建议不要这样做。 一方面,无论您认为什么优化'd get 是最小的,因为网络请求仍然需要重新进行。其次,这相当于弄乱了 superagent
的内部结构。它可能会在未来的版本中中断。第三,可能还有其他变量保持状态可能需要与 req
一起重置。)
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
命令的结果:
如何请求 url 一次并在多个 it
情况下使用。
解决方案
您必须为您想要 运行 的每个测试(每个 it
)创建一个新请求。您不能对多个测试重复使用相同的请求。所以
describe('Get /static/component-list.json', function() {
let api;
beforeEach(() => {
api = server.get('/static/component-list.json');
});
或者,如果您想减少发出的请求数量,则将您对请求的所有检查合并到一个 Mocha 测试中。
说明
如果您查看 supertest
的代码,您会 see 当您调用带有回调的 expect
方法时,expect
调用会自动调用 end
。所以这个:
api.expect('Content-Type', /json/, done);
相当于:
api.expect('Content-Type', /json/).end(done);
end
方法由 superagent
提供,这是 supertest
用来执行请求的方法。 end
方法是启动请求的方法。这意味着您已完成请求设置,现在想将其关闭。
end
method calls the request
method,其任务是使用 Node 的网络机制生成用于执行网络操作的 Node 请求对象。 问题是 request
缓存了生成的节点请求,但此节点请求对象不可重用。 所以最终,superagent
或 supertest
请求不能结束两次。您必须为每个测试重新发出请求。
(您可以通过执行 api.req = undefined
在测试之间手动刷新缓存的对象。但我强烈建议不要这样做。 一方面,无论您认为什么优化'd get 是最小的,因为网络请求仍然需要重新进行。其次,这相当于弄乱了 superagent
的内部结构。它可能会在未来的版本中中断。第三,可能还有其他变量保持状态可能需要与 req
一起重置。)