nock:回复不是函数

时间:2017-08-18 23:01:09

标签: mocha chai supertest nock

我正在使用cp拦截nock / mocha环境中的http请求。我也使用chaisupertest来查询我自己的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的第一个电话。如果我删除第一个调用,下一个调用将抛出错误,依此类推。我不知道为什么会这样。

1 个答案:

答案 0 :(得分:1)

我找到了出错的原因。我不得不在get之间放置:

nock('https://www.youtube.com')
  .get('/oembed')
  .query(true)
  .reply(200, remoteResponse);