我正在使用cp
拦截nock
/ mocha
环境中的http请求。我也使用chai
和supertest
来查询我自己的supertest-chai
服务器。像这样:
从'mocha'导入{it}; import chai,{should} from'chai';
express
当我运行测试时,import request from 'supertest';
import supertestChai from 'supertest-chai';
import Joi from 'joi';
import chaiJoi from 'chai-joi';
// others
function itRespondsTo({ url, response, description, parameters = {} }) {
const maxAge = parameters.maxAge || serverConfig.defaultCacheAge;
const params = parameters ? `${Object.entries(parameters).map(([name, val]) => `&${name}=${val}`).join('&')}` : '';
const path = `/oembed?url=${encodeURIComponent(url)}${params}`;
const desc = description || `/oembed?url=${url}${params}`;
it(`should respond to ${desc}`, (done) => {
request(server)
.get(path)
.expect(200)
.expect('Content-Type', /json/)
.expect('Access-Control-Allow-Methods', 'GET')
.expect('Cache-Control', `public, max-age=${maxAge}`)
.expect(res => Object.values(OEMBED_TYPES).should.include(res.body.type)) // [1]
.expect(res => Joi.validate(res.body, OEMBED_SCHEMAS[res.body.type]).should.validate)
.expect(response)
.end(done);
});
}
describe('YouTube endpoint', () => {
beforeEach(() => {
nock(/youtube\.com/)
.reply(200, remoteResponse);
});
afterEach(() => {
nock.restore();
});
itRespondsTo({ url: 'https://youtu.be/m4hklkGvTGQ', response });
itRespondsTo({ url: 'https://www.youtube.com/embed/m4hklkGvTGQ', response });
itRespondsTo({ url: 'https://www.youtube.com/watch?v=m4hklkGvTGQ', response });
itRespondsTo({ url: 'https://www.youtube.com/?v=m4hklkGvTGQ', response });
});
的第一次调用将始终抛出错误:
1)YouTube端点“在每个”挂钩之前“应该响应/ oembed?url = https://youtu.be/m4hklkGvTGQ”:
TypeError:nock.reply不是函数
它始终是itRespondsTo
的第一个电话。如果我删除第一个调用,下一个调用将抛出错误,依此类推。我不知道为什么会这样。
答案 0 :(得分:1)
我找到了出错的原因。我不得不在get
之间放置:
nock('https://www.youtube.com')
.get('/oembed')
.query(true)
.reply(200, remoteResponse);