Skip to content

Commit ce24e77

Browse files
authored
added a11y axe tests, refactoring tests (nzambello#35)
1 parent 3c90a25 commit ce24e77

File tree

7 files changed

+70
-52
lines changed

7 files changed

+70
-52
lines changed

.eslintrc.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"extends": ["react-app", "prettier", "prettier/react"],
2+
"extends": ["react-app", "plugin:jsx-a11y/recommended", "prettier", "prettier/react"],
33
"plugins": ["prettier"],
44
"rules": {
55
"prettier/prettier": [

README.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
[![npm version](https://badge.fury.io/js/react-csv-reader.svg)](https://www.npmjs.com/package/react-csv-reader)
55
[![npm](https://img.shields.io/npm/dt/react-csv-reader.svg)](https://www.npmjs.com/package/react-csv-reader)
66
![Node.js CI](https://github.com/nzambello/react-csv-reader/workflows/Node.js%20CI/badge.svg?branch=master)
7+
![a11y axe](https://img.shields.io/badge/a11y-tested-brightgreen)
78

89
React component that handles csv file input.
910
It handles file input and returns its content as a matrix.
@@ -126,4 +127,4 @@ To run the tests:
126127
yarn test
127128
```
128129

129-
Submitting a PR will trigger GitHub Actions to automatically run the tests.
130+
Automated accessibility tests are run with `jest-axe`.

babel.config.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
module.exports = {
2-
presets: ['@babel/preset-env', '@babel/preset-typescript', '@babel/preset-react'],
2+
presets: [['@babel/preset-env', { targets: { node: 'current' } }], '@babel/preset-typescript', '@babel/preset-react'],
33
}

package.json

+2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
"@babel/preset-typescript": "^7.8.3",
1717
"@testing-library/react": "^10.0.1",
1818
"@types/jest": "^25.1.4",
19+
"@types/jest-axe": "^3.2.1",
1920
"@types/papaparse": "^5.0.3",
2021
"@types/react": "^16.9.23",
2122
"@types/react-dom": "^16.9.5",
@@ -30,6 +31,7 @@
3031
"eslint-plugin-prettier": "^3.1.2",
3132
"eslint-plugin-react": "^7.19.0",
3233
"jest": "^25.1.0",
34+
"jest-axe": "^3.4.0",
3335
"prettier": "^1.19.1",
3436
"react": "^16.13.0",
3537
"react-dom": "^16.13.0",

src/__snapshots__/index.test.tsx.snap

+1-17
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// Jest Snapshot v1, https://goo.gl/fbAQLP
22

3-
exports[`CSVReader with all custom props is being rendered 1`] = `
3+
exports[`CSVReader is being rendered 1`] = `
44
<div
55
className="custom-csv-reader"
66
>
@@ -24,19 +24,3 @@ exports[`CSVReader with all custom props is being rendered 1`] = `
2424
/>
2525
</div>
2626
`;
27-
28-
exports[`Renders basic CSVReader 1`] = `
29-
<div
30-
className="csv-reader-input"
31-
>
32-
<input
33-
accept=".csv, text/csv"
34-
className="csv-input"
35-
disabled={false}
36-
id="react-csv-reader-input"
37-
onChange={[Function]}
38-
style={Object {}}
39-
type="file"
40-
/>
41-
</div>
42-
`;

src/index.test.tsx

+34-31
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,50 @@
11
import * as React from 'react'
22
import * as renderer from 'react-test-renderer'
33
import { cleanup, render } from '@testing-library/react'
4+
import { axe, toHaveNoViolations } from 'jest-axe'
45

56
import CSVReader from './index'
67

8+
expect.extend(toHaveNoViolations)
79
afterEach(cleanup)
810

9-
test('Renders basic CSVReader', () => {
10-
const component = renderer.create(<CSVReader onFileLoaded={() => {}} />)
11+
const papaparseOptions = {
12+
header: true,
13+
dynamicTyping: true,
14+
skipEmptyLines: true,
15+
transformHeader: (header: string) => header.toLowerCase().replace(/\W/g, '_'),
16+
}
17+
18+
const csvReader = (
19+
<CSVReader
20+
accept=".csv, text/csv, .tsv, test/tsv"
21+
cssClass="custom-csv-reader"
22+
cssInputClass="custom-csv-input"
23+
fileEncoding="iso-8859-1"
24+
inputId="react-csv-reader"
25+
inputStyle={{ color: 'red' }}
26+
label="CSV input label text"
27+
onError={e => console.error(e)}
28+
onFileLoaded={(data, fileInfo) => console.dir(data, fileInfo)}
29+
parserOptions={papaparseOptions}
30+
disabled
31+
/>
32+
)
33+
34+
test('CSVReader is being rendered', () => {
35+
const component = renderer.create(csvReader)
1136
let tree = component.toJSON()
1237
expect(tree).toMatchSnapshot()
1338
})
1439

15-
describe('CSVReader with all custom props', () => {
16-
const papaparseOptions = {
17-
header: true,
18-
dynamicTyping: true,
19-
skipEmptyLines: true,
20-
transformHeader: (header: string) => header.toLowerCase().replace(/\W/g, '_'),
21-
}
22-
23-
const csvReader = (
24-
<CSVReader
25-
accept=".csv, text/csv, .tsv, test/tsv"
26-
cssClass="custom-csv-reader"
27-
cssInputClass="custom-csv-input"
28-
fileEncoding="iso-8859-1"
29-
inputId="react-csv-reader"
30-
inputStyle={{ color: 'red' }}
31-
label="CSV input label text"
32-
onError={e => console.error(e)}
33-
onFileLoaded={(data, fileInfo) => console.dir(data, fileInfo)}
34-
parserOptions={papaparseOptions}
35-
disabled
36-
/>
37-
)
38-
39-
test('is being rendered', () => {
40-
const component = renderer.create(csvReader)
41-
let tree = component.toJSON()
42-
expect(tree).toMatchSnapshot()
43-
})
40+
test('CSVReader is accessible', async () => {
41+
const { container } = render(csvReader)
42+
const results = await axe(container)
43+
44+
expect(results).toHaveNoViolations()
45+
})
4446

47+
describe('Testing CSVReader props:', () => {
4548
test('has accept prop set', () => {
4649
const accept = '.csv, text/csv, .tsv, test/tsv'
4750
const { getByLabelText } = render(csvReader)

yarn.lock

+29-1
Original file line numberDiff line numberDiff line change
@@ -1124,7 +1124,15 @@
11241124
"@types/istanbul-lib-coverage" "*"
11251125
"@types/istanbul-lib-report" "*"
11261126

1127-
"@types/jest@^25.1.4":
1127+
"@types/jest-axe@^3.2.1":
1128+
version "3.2.1"
1129+
resolved "https://registry.yarnpkg.com/@types/jest-axe/-/jest-axe-3.2.1.tgz#84dc4306c105b304f14a594765beaa6a7aef763e"
1130+
integrity sha512-sn+MFd66gNnvhtBkbQBY6q2aznzLXUIN/jJqXd11D0P+PbUnDrthqyOj81O8BLhEYopmUXIp/ktVvdtj/1GZdw==
1131+
dependencies:
1132+
"@types/jest" "*"
1133+
axe-core "^3.0.3"
1134+
1135+
"@types/jest@*", "@types/jest@^25.1.4":
11281136
version "25.1.4"
11291137
resolved "https://registry.yarnpkg.com/@types/jest/-/jest-25.1.4.tgz#9e9f1e59dda86d3fd56afce71d1ea1b331f6f760"
11301138
integrity sha512-QDDY2uNAhCV7TMCITrxz+MRk1EizcsevzfeS6LykIlq2V1E5oO4wXG8V2ZEd9w7Snxeeagk46YbMgZ8ESHx3sw==
@@ -1619,6 +1627,11 @@ aws4@^1.8.0:
16191627
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e"
16201628
integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==
16211629

1630+
axe-core@^3.0.3, axe-core@^3.5.1:
1631+
version "3.5.2"
1632+
resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-3.5.2.tgz#1946be7a18a05b5d37f18d339989db0d5434ebf6"
1633+
integrity sha512-9wBDgdzbn06on6Xt+ay7EM4HV+NBOkeXhjK9DMezD8/qvJKeUTzheGHhM+U1uNaX4OvuIR4BePDStRLF7vyOfg==
1634+
16221635
axobject-query@^2.0.2:
16231636
version "2.1.2"
16241637
resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.1.2.tgz#2bdffc0371e643e5f03ba99065d5179b9ca79799"
@@ -3784,6 +3797,16 @@ istanbul-reports@^3.0.0:
37843797
html-escaper "^2.0.0"
37853798
istanbul-lib-report "^3.0.0"
37863799

3800+
jest-axe@^3.4.0:
3801+
version "3.4.0"
3802+
resolved "https://registry.yarnpkg.com/jest-axe/-/jest-axe-3.4.0.tgz#2bea80d37087e7723481ecc1b054f87ec563cabd"
3803+
integrity sha512-iKAq/cBxvyizSkpSY+CTndsXy2v5IWAkYXqanPF6bGaGXJ3fEtzEWQRVeZ0SHCEbsjnvDaOly5nwiiDOz0suDw==
3804+
dependencies:
3805+
axe-core "^3.5.1"
3806+
chalk "^3.0.0"
3807+
jest-matcher-utils "^25.1.0"
3808+
lodash.merge "^4.6.2"
3809+
37873810
jest-changed-files@^25.1.0:
37883811
version "25.1.0"
37893812
resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-25.1.0.tgz#73dae9a7d9949fdfa5c278438ce8f2ff3ec78131"
@@ -4361,6 +4384,11 @@ locate-path@^5.0.0:
43614384
dependencies:
43624385
p-locate "^4.1.0"
43634386

4387+
lodash.merge@^4.6.2:
4388+
version "4.6.2"
4389+
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
4390+
integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
4391+
43644392
lodash.sortby@^4.7.0:
43654393
version "4.7.0"
43664394
resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"

0 commit comments

Comments
 (0)