2017-08-18 7 views
1

nockを使用して、mocha/chai環境でHTTPリクエストを代行受信しています。また私はsupertestsupertest-chaiを使って私自身のexpressサーバに問い合わせています。このように:nock:返信は関数ではありません

インポート{it}から 'mocha'; import chai、{should}から 'chai';

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 }); 
}); 

私は私のテストを実行すると、itRespondsToの最初の呼び出しは常にエラーをスローします:

1) YouTube endpoint "before each" hook for "should respond to /oembed?url= https://youtu.be/m4hklkGvTGQ ":

TypeError: nock.reply is not a function

をそして、それは常にitRespondsToの最初の呼び出しになります。最初の呼び出しを削除すると、次の呼び出しでエラーが発生します。なぜこれが起こっているのか分かりません。

答えて

1

エラーが発生した理由が見つかりました。私はgetを間に入れなければならなかった:

nock('https://www.youtube.com') 
    .get('/oembed') 
    .query(true) 
    .reply(200, remoteResponse); 
関連する問題