jest: Fetch do not work on Jest
Do you want to request a feature or report a bug? bug
What is the current behavior?
fetch do not make the request to the server
test example:
describe('app', () => {
it('fetch correctly', async () => {
const response = await fetch('http://localhost:5000/graphql')
const data = await response.text();
expect(data).not.toBe(null);
});
});
This test is inside a react native project, I have a very long timeout
jasmine.DEFAULT_TIMEOUT_INTERVAL = 30000;.
I’m trying to implement integration tests using a real GraphQL backend (following the ideas of https://github.com/facebook/relay/issues/1281)
If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal repository on GitHub that we can npm install and npm test.
What is the expected behavior?
fetch should make the request to the server
Run Jest again with --debug and provide the full configuration it prints. Please mention your node and npm version and operating system.
jest version = 17.0.0
test framework = jasmine2
config = {
"haste": {
"defaultPlatform": "ios",
"platforms": [
"android",
"ios"
],
"providesModuleNodeModules": [
"react",
"react-native"
]
},
"moduleNameMapper": [
[
"^image![a-zA-Z0-9$_-]+$",
"GlobalImageStub"
],
[
"^[./a-zA-Z0-9$_-]+\\.(bmp|gif|jpg|jpeg|png|psd|svg|webp)$",
"RelativeImageStub"
]
],
"modulePathIgnorePatterns": [
"app/node_modules/react-native/Libraries/react-native/",
"app/node_modules/react-native/packager/"
],
"transformIgnorePatterns": [
"node_modules/(?!react-native|tcomb-form-native|react-native-localization|@exponent/react-native-action-sheet|@exponent/ex-navigation|@exponent/react-native-touchable-native-feedback-safe|rnrf-relay-renderer|react-clone-referenced-element|react-native-looped-carousel|rn-splash-screen)"
],
"setupFiles": [
"app/node_modules/babel-polyfill/lib/index.js",
"app/node_modules/jest-react-native/build/setup.js"
],
"testEnvironment": "app/node_modules/jest-environment-node/build/index.js",
"snapshotSerializers": [
"app/node_modules/jest-html"
],
"preset": "jest-react-native",
"unmockedModulePathPatterns": [
"app/node_modules/fbjs-scripts/",
"app/node_modules/fbjs/node_modules/core-js/",
"app/node_modules/fbjs/node_modules/promise/",
"app/node_modules/fbjs/lib/(?!(ErrorUtils.js$|fetch.js$|fetchWithRetries.js$))",
"app/node_modules/object-assign/",
"app/node_modules/react/",
"app/node_modules/react-addons-test-utils/",
"app/node_modules/react-dom/",
"app/node_modules/react-static-container/",
"app/node_modules/react-relay/",
"app/node_modules/event-target-shim",
"app/node_modules/whatwg-fetch"
],
"verbose": true,
"moduleFileExtensions": [
"js",
"json",
"es6",
"ios.js"
],
"rootDir": "app",
"name": "-Users-sibelius-Dev-rturk-brandlovers-reactnative",
"testRunner": "app/node_modules/jest-jasmine2/build/index.js",
"transform": [
[
"^.+\\.jsx?$",
"app/node_modules/babel-jest/build/index.js"
]
],
"usesBabelJest": true,
"automock": false,
"bail": false,
"browser": false,
"cacheDirectory": "/var/folders/n_/30jh5m816yzg3_cftvg647j40000gn/T/jest",
"coveragePathIgnorePatterns": [
"/node_modules/"
],
"coverageReporters": [
"json",
"text",
"lcov",
"clover"
],
"expand": false,
"globals": {},
"mocksPattern": "__mocks__",
"moduleDirectories": [
"node_modules"
],
"noStackTrace": false,
"notify": false,
"resetMocks": false,
"resetModules": false,
"testPathDirs": [
"app"
],
"testPathIgnorePatterns": [
"/node_modules/"
],
"testRegex": "(/__tests__/.*|\\.(test|spec))\\.jsx?$",
"testURL": "about:blank",
"timers": "real",
"useStderr": false,
"watch": false,
"cache": true,
"watchman": true,
"testcheckOptions": {
"times": 100,
"maxSize": 200
}
}
node 6.9.1 mac os x sierra
About this issue
- Original URL
- State: closed
- Created 8 years ago
- Reactions: 7
- Comments: 18 (2 by maintainers)
For people passing by, simplest working solution:
when testing this simple function:
Jest configuration:
(because Jest uses Node.js and Node.js does not come with fetch => specific to web browsers)
Real life simple example: https://github.com/tkrotoff/MarvelHeroes
@tkrotoff
whatwg-fetchdidn’t work for me,isomorphic-fetchdid@connected-mgosbee I have a working example here: https://github.com/sibelius/relay-integration-test/blob/master/RelayApp/test/env.js
This might help too: https://github.com/jefflau/jest-fetch-mock
fetchis not available in Node, which is where Jest is running your tests. Is it an experimental browser technology.You will need to polyfill the behaviour if you want to make actual http calls, or mock
fetchto simulate network requests.it works on
setupFilesand I have to polyfillXMLHttpRequest(https://github.com/ykzts/node-xmlhttprequest)tks
Exactly! Check out whatwg-fetch.
Figured it out. Added a setupJest.js file to the setupFiles section of my package.json. Then added this to setupJest.js
global.XMLHttpRequest = require('w3c-xmlhttprequest').XMLHttpRequest;I didn’t really wanted to mock on a specific test and node-fetch came through brilliantly for me.
Is
isomorphic-fetchnot in the Jest any more?Weirdly, neither of the polyfills repacing XMLHttpResponse in the fixes above seemed to work – I had to replace fetch entirely, by including
require("isomorphic-fetch");in the setupFiles as described above.