Jest
использует макет в __mocks__/node-fetch.js
в любое время node-fetch
требуется во время теста.
Проблема в том, что первое, что fetch-mock
делает, требует node-fetch
.
Это означает, что Request
не определен, когда он установлен на config
здесь , поэтому вызов prototype
для неопределенного Request
вызывает ошибку здесь .
Кто-то умнее меня может знать, как заставить Jest
требовать фактического node-fetch
, когда fetch-mock
требует node-fetch
в макете для node-fetch
, но из того, что я вижу, это не похоже это возможно.
Похоже, вам придется удалить макет на __mocks__/node-fetch.js
и передать fetch
вашему коду, что-то вроде этого:
myclass.js
class MyClass {
static query(fetch, sessionId, query) {
const url = 'https://api.foobar.com';
const body = {
sessionId,
query
};
return fetch(url, {
method: 'post',
body: JSON.stringify(body)
})
.then(res => res.json());
}
}
module.exports = MyClass;
... затем создайте sandbox
в своем тесте и передайте его в свой код, что-то вроде этого:
myclass.test.js
const fetch = require('fetch-mock').sandbox();
const MyClass = require('./myclass');
describe('MyClass', () => {
describe('.query', () => {
it('returns the response', () => {
fetch.mock('*', {'result': {'fulfillment': {'speech': 'The answer'}}});
expect.assertions(1);
return MyClass.query(fetch, '123', 'the question').then((data) => {
expect(data.result.fulfillment.speech).toBe('The answer'); // SUCCESS
});
});
});
});