diff --git a/.babelrc b/.babelrc deleted file mode 100644 index 8bf094f5..00000000 --- a/.babelrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "presets": ["es2015", "react"], - "plugins": ["transform-object-assign"], - "ignore": "node_modules" -} diff --git a/babel.config.json b/babel.config.json new file mode 100644 index 00000000..68c8efeb --- /dev/null +++ b/babel.config.json @@ -0,0 +1,16 @@ +{ + "presets": [ + [ + "@babel/env", + { + "targets": "> 0.25%, not dead, ie >= 11", + "useBuiltIns": "usage", + "corejs": "3.6" + } + ], + "@babel/preset-react" + ], + "plugins": [ + "@babel/plugin-transform-object-assign" + ] +} diff --git a/package.json b/package.json index 93ed622e..373dc178 100644 --- a/package.json +++ b/package.json @@ -16,28 +16,31 @@ "moment": "^2.10.2", "numbro": "^1.7.1", "paths-js": "^0.4.3", + "react": "^15.6.2", "react-addons-css-transition-group": "^15.5.2", "react-addons-pure-render-mixin": "^15.5.2", + "react-dom": "^15.6.2", "react-tween-state": "0.1.5", "remarkable": "^1.6.0" }, "devDependencies": { - "babel-core": "^6.11.4", - "babel-jest": "^14.1.0", - "babel-plugin-transform-object-assign": "^6.8.0", - "babel-preset-es2015": "^6.3.13", - "babel-preset-react": "^6.3.13", - "babel-register": "^6.14.0", - "babelify": "^7.3.0", - "browserify": "~13.0.0", + "@babel/core": "^7.10.2", + "@babel/plugin-transform-object-assign": "^7.10.1", + "@babel/preset-env": "^7.10.2", + "@babel/preset-react": "^7.10.1", + "@babel/register": "^7.10.1", + "babel-jest": "^26.0.1", + "babelify": "^10.0.0", + "browserify": "^16.5.1", "chai": "^3.5.0", "compression": "~1.6.1", + "core-js": "^3.6.5", "enzyme": "^2.4.1", "express": "~4.14.0", "gulp": "~3.9.1", "gulp-autoprefixer": "~3.1.0", "gulp-awspublish": "~3.2.0", - "gulp-babel": "^6.1.2", + "gulp-babel": "^8.0.0", "gulp-clean": "^0.3.2", "gulp-concat": "~2.6.0", "gulp-cssnano": "^2.1.1", @@ -49,7 +52,8 @@ "gulp-sourcemaps": "^1.6.0", "gulp-uglify": "~2.0.0", "gulp-util": "~3.0.1", - "jest-cli": "^16.0.0", + "jest-cli": "^26.0.1", + "jsdom": "^16.2.2", "jshint-stylish": "~2.2.0", "mocha": "^3.0.1", "morgan": "~1.7.0", diff --git a/src/components/address/AddressLookup/__tests__/AddressLookup-test.js b/src/components/address/AddressLookup/__tests__/AddressLookup-test.js index cdae88d3..5d3ed77f 100644 --- a/src/components/address/AddressLookup/__tests__/AddressLookup-test.js +++ b/src/components/address/AddressLookup/__tests__/AddressLookup-test.js @@ -1,7 +1,7 @@ jest.disableAutomock() jest.mock('../../../../api/address') -jest.useFakeTimers() +jest.useFakeTimers('modern') import address from '../../../../api/address' import React from 'react' @@ -142,7 +142,7 @@ describe('AddressLookup', function () { beforeEach(function () { address.find.mockClear() address.search.mockClear() - validate = jest.genMockFunction() + validate = jest.fn(() => {}) element = TestUtils.renderIntoDocument() element.setList(addressSearchResult) @@ -187,7 +187,7 @@ describe('AddressLookup', function () { }) it('allows you to reset the address', function () { - var validate = jest.genMockFunction() + var validate = jest.fn(() => {}) var element = TestUtils.renderIntoDocument() var resetButton = findByClass(element, 'AddressLookup__reset') TestUtils.Simulate.click(resetButton) diff --git a/src/components/amount/Amount/__tests__/Amount-tests.js b/src/components/amount/Amount/__tests__/Amount-tests.js index f220dd7b..e2e72c61 100644 --- a/src/components/amount/Amount/__tests__/Amount-tests.js +++ b/src/components/amount/Amount/__tests__/Amount-tests.js @@ -59,7 +59,7 @@ describe('Amount', function () { }) it('exposes selected value through callback', function () { - const callback = jest.genMockFunction() + const callback = jest.fn(() => {}) const element = mount() expect(callback).lastCalledWith(700) diff --git a/src/components/charities/PromoCharitiesResult/__tests__/PromoCharitiesResult-test.js b/src/components/charities/PromoCharitiesResult/__tests__/PromoCharitiesResult-test.js index 56d1ebd0..f52f1f1c 100644 --- a/src/components/charities/PromoCharitiesResult/__tests__/PromoCharitiesResult-test.js +++ b/src/components/charities/PromoCharitiesResult/__tests__/PromoCharitiesResult-test.js @@ -29,7 +29,7 @@ describe('PromoCharitiesResult component default rendering', function () { }) describe('Component behaviour when clicked or tapped', function () { - var callback = jest.genMockFunction() + var callback = jest.fn(() => {}) var promoCharitiesResult = var component = TestUtils.renderIntoDocument(promoCharitiesResult) var link = findByClass(component, 'PromoCharitiesResult__link') diff --git a/src/components/charities/PromoCharitiesResults/__tests__/PromoCharitiesResults-test.js b/src/components/charities/PromoCharitiesResults/__tests__/PromoCharitiesResults-test.js index 93fd5855..13e4f8e7 100644 --- a/src/components/charities/PromoCharitiesResults/__tests__/PromoCharitiesResults-test.js +++ b/src/components/charities/PromoCharitiesResults/__tests__/PromoCharitiesResults-test.js @@ -7,7 +7,7 @@ var findByClass = TestUtils.findRenderedDOMComponentWithClass var scryByClass = TestUtils.scryRenderedDOMComponentsWithClass describe('PromoCharitiesResults', function () { - var mockFunction = jest.genMockFunction() + var mockFunction = jest.fn(() => {}) var contents = [ { category: 'test tab 1', diff --git a/src/components/forms/Input/__tests__/Input-test.js b/src/components/forms/Input/__tests__/Input-test.js index 0af49612..35dc1f78 100644 --- a/src/components/forms/Input/__tests__/Input-test.js +++ b/src/components/forms/Input/__tests__/Input-test.js @@ -48,10 +48,10 @@ describe('Input', function () { }) it('will not execute methods when disabled', function () { - var modal = jest.genMockFunction() - var output = jest.genMockFunction() - var mask = jest.genMockFunction() - var validate = jest.genMockFunction() + var modal = jest.fn(() => {}) + var output = jest.fn(() => {}) + var mask = jest.fn(() => {}) + var validate = jest.fn(() => {}) var element = TestUtils.renderIntoDocument() var input = findByClass(element, 'Input__input') TestUtils.Simulate.focus(input) @@ -65,7 +65,7 @@ describe('Input', function () { }) it('will execute modal function on focus', function () { - var modal = jest.genMockFunction() + var modal = jest.fn(() => {}) var element = TestUtils.renderIntoDocument() var input = findByClass(element, 'Input__input') TestUtils.Simulate.focus(input) @@ -78,7 +78,7 @@ describe('Input', function () { }) it('will execute output function on change', function () { - var output = jest.genMockFunction() + var output = jest.fn(() => {}) var element = TestUtils.renderIntoDocument() var input = findByClass(element, 'Input__input') TestUtils.Simulate.change(input, { target: { value: 'newValue' } }) @@ -86,7 +86,7 @@ describe('Input', function () { }) it('will execute mask function on change', function () { - var mask = jest.genMockFunction().mockReturnValue('newValue--masked') + var mask = jest.fn(() => {}).mockReturnValue('newValue--masked') var element = TestUtils.renderIntoDocument() var input = findByClass(element, 'Input__input') TestUtils.Simulate.change(input, { target: { value: 'newValue' } }) @@ -95,8 +95,8 @@ describe('Input', function () { }) it('will execute validate function, but not set state as invalid on blur if not required', function () { - var validate = jest.genMockFunction() - var setValid = jest.genMockFunction() + var validate = jest.fn(() => {}) + var setValid = jest.fn(() => {}) var element = TestUtils.renderIntoDocument() element.setValid = setValid var input = findByClass(element, 'Input__input') @@ -106,7 +106,7 @@ describe('Input', function () { }) it('will execute validate function on blur if required', function () { - var validate = jest.genMockFunction() + var validate = jest.fn(() => {}) var element = TestUtils.renderIntoDocument() var input = findByClass(element, 'Input__input') TestUtils.Simulate.change(input, { target: { value: 'testValue' } }) @@ -120,7 +120,7 @@ describe('Input', function () { }) it('will execute validate function on load if has value', function () { - var validate = jest.genMockFunction() + var validate = jest.fn(() => {}) var element = TestUtils.renderIntoDocument() expect(validate).lastCalledWith('testValue', element.setValid) var setValidCallback = validate.mock.calls[0][1] diff --git a/src/components/forms/Select/__tests__/Select_test.js b/src/components/forms/Select/__tests__/Select_test.js index 146e0808..71bd4525 100644 --- a/src/components/forms/Select/__tests__/Select_test.js +++ b/src/components/forms/Select/__tests__/Select_test.js @@ -41,7 +41,7 @@ describe('Select', function () { }) it('will not execute methods when disabled', function () { - var output = jest.genMockFunction() + var output = jest.fn(() => {}) var element = TestUtils.renderIntoDocument() var selectInput = findByClass(element, 'Input__input') TestUtils.Simulate.change(selectInput, { target: { value: 'option3' } }) diff --git a/src/components/leaderboards/FitnessLeaderboardColHead/__tests__/FitnessLeaderboardColHead-test.js b/src/components/leaderboards/FitnessLeaderboardColHead/__tests__/FitnessLeaderboardColHead-test.js index 7d42a182..ce2c0614 100644 --- a/src/components/leaderboards/FitnessLeaderboardColHead/__tests__/FitnessLeaderboardColHead-test.js +++ b/src/components/leaderboards/FitnessLeaderboardColHead/__tests__/FitnessLeaderboardColHead-test.js @@ -23,7 +23,7 @@ class TestWrapper extends React.Component { describe('FitnessLeaderboardColHead', function () { describe('Default behaviour', function () { it('calls a function onclick', function () { - var callback = jest.genMockFunction() + var callback = jest.fn(() => {}) var component = TestUtils.renderIntoDocument( {}).mockImplementation(function (id, callback) { callback(mockCampaignResponse) }) }) diff --git a/src/components/leaderboards/LeaderboardPaging/__tests__/LeaderboardPaging-test.js b/src/components/leaderboards/LeaderboardPaging/__tests__/LeaderboardPaging-test.js index 57cd409d..40cc04c9 100644 --- a/src/components/leaderboards/LeaderboardPaging/__tests__/LeaderboardPaging-test.js +++ b/src/components/leaderboards/LeaderboardPaging/__tests__/LeaderboardPaging-test.js @@ -9,7 +9,7 @@ describe('LeaderboardPaging', function () { describe('component defaults', function () { let leaderboardPaging let component - let callback = jest.genMockFunction() + let callback = jest.fn(() => {}) beforeEach(function () { leaderboardPaging = diff --git a/src/components/leaderboards/LeaderboardPagingButton/__tests__/LeaderboardPagingButton-test.js b/src/components/leaderboards/LeaderboardPagingButton/__tests__/LeaderboardPagingButton-test.js index c05c46bb..0280f4ac 100644 --- a/src/components/leaderboards/LeaderboardPagingButton/__tests__/LeaderboardPagingButton-test.js +++ b/src/components/leaderboards/LeaderboardPagingButton/__tests__/LeaderboardPagingButton-test.js @@ -9,7 +9,7 @@ var findByClass = TestUtils.findRenderedDOMComponentWithClass describe('LeaderboardPagingButton', function () { var leaderboardPagingButton var component - var callback = jest.genMockFunction() + var callback = jest.fn(() => {}) var prevActiveClass = 'LeaderboardPagingButton__prev--active' var nextActiveClass = 'LeaderboardPagingButton__next--active' diff --git a/src/components/search/AggregateSearchModal/__tests__/AggregateSearchModal-test.js b/src/components/search/AggregateSearchModal/__tests__/AggregateSearchModal-test.js index c9625657..d565e8e1 100644 --- a/src/components/search/AggregateSearchModal/__tests__/AggregateSearchModal-test.js +++ b/src/components/search/AggregateSearchModal/__tests__/AggregateSearchModal-test.js @@ -47,7 +47,7 @@ describe('AggregateSearchModal', function () { describe('Selecting results', function () { it('renders selectable results', function () { - var onSelect = jest.genMockFunction() + var onSelect = jest.fn(() => {}) var element = TestUtils.renderIntoDocument( {}) + var mockClose = jest.fn(() => {}) searchModal = var component = TestUtils.renderIntoDocument(searchModal) diff --git a/src/components/search/AggregateSearchResult/__tests__/AggregateSearchResult-test.js b/src/components/search/AggregateSearchResult/__tests__/AggregateSearchResult-test.js index 811db17d..4fe3fcd8 100644 --- a/src/components/search/AggregateSearchResult/__tests__/AggregateSearchResult-test.js +++ b/src/components/search/AggregateSearchResult/__tests__/AggregateSearchResult-test.js @@ -17,7 +17,7 @@ describe('AggregateSearchResult', function () { }) it('calls onSelect on click', function () { - var callback = jest.genMockFunction() + var callback = jest.fn(() => {}) var searchResult = var component = TestUtils.renderIntoDocument(searchResult) var element = findByClass(component, 'AggregateSearchResult') diff --git a/src/components/search/CharitySearchModal/__tests__/CharitySearchModal-test.js b/src/components/search/CharitySearchModal/__tests__/CharitySearchModal-test.js index 27b7230f..ee57249d 100644 --- a/src/components/search/CharitySearchModal/__tests__/CharitySearchModal-test.js +++ b/src/components/search/CharitySearchModal/__tests__/CharitySearchModal-test.js @@ -1,7 +1,7 @@ jest.disableAutomock() jest.mock('../../../../api/charities') -jest.useFakeTimers() +jest.useFakeTimers('modern') import charities from '../../../../api/charities' const donateUrl = 'http://donate.url/' @@ -145,7 +145,7 @@ describe('CharitySearchModal', function () { }) it('links to charity url for default visit action', function () { - let onClose = jest.genMockFunction() + let onClose = jest.fn(() => {}) let charitySearchModal = let element = TestUtils.renderIntoDocument(charitySearchModal) element.setState({ results: [charity] }) @@ -156,7 +156,7 @@ describe('CharitySearchModal', function () { }) it('links to fundraise url for fundraise action', function () { - let onClose = jest.genMockFunction() + let onClose = jest.fn(() => {}) let charitySearchModal = let element = TestUtils.renderIntoDocument(charitySearchModal) element.setState({ results: [charity] }) @@ -168,7 +168,7 @@ describe('CharitySearchModal', function () { }) it('links to donate url for donate action', function () { - let onClose = jest.genMockFunction() + let onClose = jest.fn(() => {}) let charitySearchModal = let element = TestUtils.renderIntoDocument(charitySearchModal) element.setState({ results: [charity] }) @@ -180,8 +180,8 @@ describe('CharitySearchModal', function () { }) it('calls custom onSelect callback on charity select', function () { - let onClose = jest.genMockFunction() - let callback = jest.genMockFunction() + let onClose = jest.fn(() => {}) + let callback = jest.fn(() => {}) let charitySearchModal = let element = TestUtils.renderIntoDocument(charitySearchModal) element.setState({ results: [charity] }) @@ -193,8 +193,8 @@ describe('CharitySearchModal', function () { }) it('calls onClose on charity select when onSelect callback given', function () { - let onClose = jest.genMockFunction() - let callback = jest.genMockFunction() + let onClose = jest.fn(() => {}) + let callback = jest.fn(() => {}) let charitySearchModal = let element = TestUtils.renderIntoDocument(charitySearchModal) element.setState({ results: [charity] }) diff --git a/src/components/search/CharitySearchModalCustom/__tests__/CharitySearchModal-test.js b/src/components/search/CharitySearchModalCustom/__tests__/CharitySearchModal-test.js index b5c60df7..88056da6 100644 --- a/src/components/search/CharitySearchModalCustom/__tests__/CharitySearchModal-test.js +++ b/src/components/search/CharitySearchModalCustom/__tests__/CharitySearchModal-test.js @@ -1,7 +1,7 @@ jest.disableAutomock() jest.mock('../../../../api/frolCharities') -jest.useFakeTimers() +jest.useFakeTimers('modern') import charities from '../../../../api/frolCharities' @@ -105,7 +105,7 @@ describe('CharitySearchModal', function () { }) it('links to charity url for default visit action', function () { - let onClose = jest.genMockFunction() + let onClose = jest.fn(() => {}) let charitySearchModal = let element = TestUtils.renderIntoDocument(charitySearchModal) element.setState({ results: [charity] }) diff --git a/src/components/search/PageSearchModal/__tests__/PageSearchModal-test.js b/src/components/search/PageSearchModal/__tests__/PageSearchModal-test.js index 4f683743..9fe157c3 100644 --- a/src/components/search/PageSearchModal/__tests__/PageSearchModal-test.js +++ b/src/components/search/PageSearchModal/__tests__/PageSearchModal-test.js @@ -1,7 +1,7 @@ jest.disableAutomock() jest.mock('../../../../api/pages') -jest.useFakeTimers() +jest.useFakeTimers('modern') import pages from '../../../../api/pages' import React from 'react' @@ -219,8 +219,8 @@ describe('Searching', function () { }) it('allows custom callback on page select', function () { - const onClose = jest.genMockFunction() - const callback = jest.genMockFunction() + const onClose = jest.fn(() => {}) + const callback = jest.fn(() => {}) const pageSearchModal = ( {}) + const callback = jest.fn(() => {}) const pageSearchModal = ( let element = TestUtils.renderIntoDocument(component) let input = findByTag(element, 'input') - expect(input).toBe(document.activeElement) + expect(document.activeElement).toBe(input) // teardown: must unfocus elements or other tests fail input.blur() }) it('calls onChange on change', function () { - let callback = jest.genMockFunction() + let callback = jest.fn(() => {}) let component = let element = TestUtils.renderIntoDocument(component) let input = findByTag(element, 'input') @@ -65,7 +69,7 @@ describe('SearchInput', function () { }) it('debounces input changes', function () { - let callback = jest.genMockFunction() + let callback = jest.fn(() => {}) let component = let element = TestUtils.renderIntoDocument(component) let input = findByTag(element, 'input') diff --git a/src/components/search/SearchResult/__tests__/SearchResult-test.js b/src/components/search/SearchResult/__tests__/SearchResult-test.js index c9d92513..9baee278 100644 --- a/src/components/search/SearchResult/__tests__/SearchResult-test.js +++ b/src/components/search/SearchResult/__tests__/SearchResult-test.js @@ -25,7 +25,7 @@ describe('SearchResult', function () { }) it('calls onSelect callback on click if given, with the event click object', function () { - var callback = jest.genMockFunction() + var callback = jest.fn(() => {}) var searchResult = var component = TestUtils.renderIntoDocument(searchResult) var element = findByClass(component, 'SearchResult') diff --git a/src/components/tabs/Tab/__tests__/Tab-test.js b/src/components/tabs/Tab/__tests__/Tab-test.js index ce74f69d..344d21c6 100644 --- a/src/components/tabs/Tab/__tests__/Tab-test.js +++ b/src/components/tabs/Tab/__tests__/Tab-test.js @@ -9,7 +9,7 @@ describe('Tab', function () { var tab var component var element - var callback = jest.genMockFunction() + var callback = jest.fn(() => {}) beforeEach(function () { tab = diff --git a/src/components/tabs/TabDrawer/__tests__/TabDrawer-test.js b/src/components/tabs/TabDrawer/__tests__/TabDrawer-test.js index 56d17303..3f3fd501 100644 --- a/src/components/tabs/TabDrawer/__tests__/TabDrawer-test.js +++ b/src/components/tabs/TabDrawer/__tests__/TabDrawer-test.js @@ -7,9 +7,9 @@ var findByClass = TestUtils.findRenderedDOMComponentWithClass describe('TabDrawer', function () { var tabDrawer - var component - var element - var callback = jest.genMockFunction() + var component, element + + var callback = jest.fn(() => {}) beforeEach(function () { tabDrawer = diff --git a/src/components/totals/EntityGoalProgress/__tests__/EntityGoalProgress-test.js b/src/components/totals/EntityGoalProgress/__tests__/EntityGoalProgress-test.js index 8432640b..9aa80485 100644 --- a/src/components/totals/EntityGoalProgress/__tests__/EntityGoalProgress-test.js +++ b/src/components/totals/EntityGoalProgress/__tests__/EntityGoalProgress-test.js @@ -185,7 +185,7 @@ describe('FundsRaised', function () { }) it('calls a callback function after data is fetched', function () { - let cb = jest.genMockFunction() + let cb = jest.fn(() => {}) element = TestUtils.renderIntoDocument() expect(cb.mock.calls.length).toBe(1) }) diff --git a/src/components/totals/FundsRaised/__tests__/FundsRaised-test.js b/src/components/totals/FundsRaised/__tests__/FundsRaised-test.js index 51b9ccaa..7376d880 100644 --- a/src/components/totals/FundsRaised/__tests__/FundsRaised-test.js +++ b/src/components/totals/FundsRaised/__tests__/FundsRaised-test.js @@ -289,7 +289,7 @@ describe('FundsRaised', function () { }) it('fires the callback after API data is fetched', function () { - let cb = jest.genMockFunction() + let cb = jest.fn(() => {}) TestUtils.renderIntoDocument() expect(cb.mock.calls.length).toBe(1) expect(cb.mock.calls[0].length).toBe(1) diff --git a/src/lib/__tests__/getJSONP-test.js b/src/lib/__tests__/getJSONP-test.js index 29c73cd3..cc49a474 100644 --- a/src/lib/__tests__/getJSONP-test.js +++ b/src/lib/__tests__/getJSONP-test.js @@ -12,14 +12,14 @@ describe('getJSONP', function () { }) it('retries a default of 2 times', function () { - var callback = jest.genMockFunction() + var callback = jest.fn(() => {}) getJSONP('http://blah.com', callback) expect(jsonp.mock.calls.length).toBe(3) expect(callback).lastCalledWith(null) }) it('accepts number of retries', function () { - var callback = jest.genMockFunction() + var callback = jest.fn(() => {}) getJSONP('http://blah.com', callback, { retries: 5 }) expect(jsonp.mock.calls.length).toBe(6) diff --git a/test/helpers/jsx.opts b/test/helpers/jsx.opts index 0c486f32..68201807 100644 --- a/test/helpers/jsx.opts +++ b/test/helpers/jsx.opts @@ -1,2 +1,2 @@ --require test/helpers/common.js ---compilers js:babel-core/register +--compilers js:@babel/register diff --git a/test/helpers/testdom.js b/test/helpers/testdom.js index 50ecdf6e..918ce7d3 100644 --- a/test/helpers/testdom.js +++ b/test/helpers/testdom.js @@ -1,13 +1,13 @@ 'use strict' +const jsdom = require('jsdom') +const { JSDOM } = jsdom // Via http://www.asbjornenge.com/wwc/testing_react_components.html -module.exports = (markup, options) => { +module.exports = function (markup) { if (typeof document !== 'undefined') return - var jsdom = require('jsdom').jsdom - global.document = jsdom(markup || '', options) - global.window = document.defaultView + const dom = new JSDOM(markup || '') + global.document = dom.window.document + global.window = dom.window global.navigator = { userAgent: 'node.js' } - // ... add whatever browser globals your tests might need ... } - diff --git a/test/mocha.opts b/test/mocha.opts index 0e6e7040..2e918582 100644 --- a/test/mocha.opts +++ b/test/mocha.opts @@ -1,3 +1,3 @@ --recursive ---compilers js:babel-core/register +--compilers js:@babel/register --require test/helpers/common.js