Ich verwende nock
, um meine HTTP-Anfragen in einer mocha
/chai
Umgebung abzufangen. Auch verwende ich supertest
und supertest-chai
, um meinen eigenen express
Server abzufragen. So:nock: Antwort ist keine Funktion
importieren {it} aus 'mocha'; Import Chai, {sollte} von '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 });
});
Wenn ich meine Tests laufen, werfen der erste Anruf von itRespondsTo
wird immer einen Fehler:
1) YouTube endpoint "before each" hook for "should respond to /oembed?url= https://youtu.be/m4hklkGvTGQ ":
TypeError: nock.reply is not a function
Und es wird immer der erste Aufruf von itRespondsTo
sein. Wenn ich den ersten Anruf entferne, wird der nächste Anruf den Fehler usw. auslösen. Ich habe keine Ahnung, warum das passiert.