Skip to content

Commit 2da8c71

Browse files
SimenBgnapse
andauthored
fix: do not explicitly depend on jest assertion utils (#250)
Co-authored-by: Ernesto García <[email protected]>
1 parent 92176e1 commit 2da8c71

24 files changed

+163
-119
lines changed

package.json

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,6 @@
3737
"chalk": "^3.0.0",
3838
"css": "^3.0.0",
3939
"css.escape": "^1.5.1",
40-
"jest-diff": "^25.1.0",
41-
"jest-matcher-utils": "^25.1.0",
4240
"lodash": "^4.17.15",
4341
"redent": "^3.0.0"
4442
},

src/__tests__/utils.js

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,22 @@ test('deprecate', () => {
2222
})
2323

2424
describe('checkHtmlElement', () => {
25+
let assertionContext
26+
beforeAll(() => {
27+
expect.extend({
28+
fakeMatcher() {
29+
assertionContext = this
30+
31+
return {pass: true}
32+
},
33+
})
34+
35+
expect(true).fakeMatcher(true)
36+
})
2537
it('does not throw an error for correct html element', () => {
2638
expect(() => {
2739
const element = document.createElement('p')
28-
checkHtmlElement(element, () => {}, {})
40+
checkHtmlElement(element, () => {}, assertionContext)
2941
}).not.toThrow()
3042
})
3143

@@ -35,25 +47,25 @@ describe('checkHtmlElement', () => {
3547
'http://www.w3.org/2000/svg',
3648
'rect',
3749
)
38-
checkHtmlElement(element, () => {}, {})
50+
checkHtmlElement(element, () => {}, assertionContext)
3951
}).not.toThrow()
4052
})
4153

4254
it('does not throw for body', () => {
4355
expect(() => {
44-
checkHtmlElement(document.body, () => {}, {})
56+
checkHtmlElement(document.body, () => {}, assertionContext)
4557
}).not.toThrow()
4658
})
4759

4860
it('throws for undefined', () => {
4961
expect(() => {
50-
checkHtmlElement(undefined, () => {}, {})
62+
checkHtmlElement(undefined, () => {}, assertionContext)
5163
}).toThrow(HtmlElementTypeError)
5264
})
5365

5466
it('throws for document', () => {
5567
expect(() => {
56-
checkHtmlElement(document, () => {}, {})
68+
checkHtmlElement(document, () => {}, assertionContext)
5769
}).toThrow(HtmlElementTypeError)
5870
})
5971

@@ -62,7 +74,7 @@ describe('checkHtmlElement', () => {
6274
checkHtmlElement(
6375
() => {},
6476
() => {},
65-
{},
77+
assertionContext,
6678
)
6779
}).toThrow(HtmlElementTypeError)
6880
})
@@ -77,7 +89,7 @@ describe('checkHtmlElement', () => {
7789
},
7890
},
7991
() => {},
80-
{},
92+
assertionContext,
8193
)
8294
}).toThrow(HtmlElementTypeError)
8395
})

src/to-be-checked.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import {roles} from 'aria-query'
2-
import {matcherHint, printReceived} from 'jest-matcher-utils'
32
import {checkHtmlElement, toSentence} from './utils'
43

54
export function toBeChecked(element) {
@@ -37,10 +36,14 @@ export function toBeChecked(element) {
3736
message: () => {
3837
const is = isChecked() ? 'is' : 'is not'
3938
return [
40-
matcherHint(`${this.isNot ? '.not' : ''}.toBeChecked`, 'element', ''),
39+
this.utils.matcherHint(
40+
`${this.isNot ? '.not' : ''}.toBeChecked`,
41+
'element',
42+
'',
43+
),
4144
'',
4245
`Received element ${is} checked:`,
43-
` ${printReceived(element.cloneNode(false))}`,
46+
` ${this.utils.printReceived(element.cloneNode(false))}`,
4447
].join('\n')
4548
},
4649
}

src/to-be-disabled.js

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import {matcherHint, printReceived} from 'jest-matcher-utils'
21
import {checkHtmlElement, getTag} from './utils'
32

43
// form elements that support 'disabled'
@@ -70,10 +69,14 @@ export function toBeDisabled(element) {
7069
message: () => {
7170
const is = isDisabled ? 'is' : 'is not'
7271
return [
73-
matcherHint(`${this.isNot ? '.not' : ''}.toBeDisabled`, 'element', ''),
72+
this.utils.matcherHint(
73+
`${this.isNot ? '.not' : ''}.toBeDisabled`,
74+
'element',
75+
'',
76+
),
7477
'',
7578
`Received element ${is} disabled:`,
76-
` ${printReceived(element.cloneNode(false))}`,
79+
` ${this.utils.printReceived(element.cloneNode(false))}`,
7780
].join('\n')
7881
},
7982
}
@@ -89,10 +92,14 @@ export function toBeEnabled(element) {
8992
message: () => {
9093
const is = isEnabled ? 'is' : 'is not'
9194
return [
92-
matcherHint(`${this.isNot ? '.not' : ''}.toBeEnabled`, 'element', ''),
95+
this.utils.matcherHint(
96+
`${this.isNot ? '.not' : ''}.toBeEnabled`,
97+
'element',
98+
'',
99+
),
93100
'',
94101
`Received element ${is} enabled:`,
95-
` ${printReceived(element.cloneNode(false))}`,
102+
` ${this.utils.printReceived(element.cloneNode(false))}`,
96103
].join('\n')
97104
},
98105
}

src/to-be-empty-dom-element.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import {matcherHint, printReceived} from 'jest-matcher-utils'
21
import {checkHtmlElement} from './utils'
32

43
export function toBeEmptyDOMElement(element) {
@@ -8,14 +7,14 @@ export function toBeEmptyDOMElement(element) {
87
pass: element.innerHTML === '',
98
message: () => {
109
return [
11-
matcherHint(
10+
this.utils.matcherHint(
1211
`${this.isNot ? '.not' : ''}.toBeEmptyDOMElement`,
1312
'element',
1413
'',
1514
),
1615
'',
1716
'Received:',
18-
` ${printReceived(element.innerHTML)}`,
17+
` ${this.utils.printReceived(element.innerHTML)}`,
1918
].join('\n')
2019
},
2120
}

src/to-be-empty.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import {matcherHint, printReceived} from 'jest-matcher-utils'
21
import {checkHtmlElement, deprecate} from './utils'
32

43
export function toBeEmpty(element) {
@@ -12,10 +11,14 @@ export function toBeEmpty(element) {
1211
pass: element.innerHTML === '',
1312
message: () => {
1413
return [
15-
matcherHint(`${this.isNot ? '.not' : ''}.toBeEmpty`, 'element', ''),
14+
this.utils.matcherHint(
15+
`${this.isNot ? '.not' : ''}.toBeEmpty`,
16+
'element',
17+
'',
18+
),
1619
'',
1720
'Received:',
18-
` ${printReceived(element.innerHTML)}`,
21+
` ${this.utils.printReceived(element.innerHTML)}`,
1922
].join('\n')
2023
},
2124
}

src/to-be-in-the-document.js

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,3 @@
1-
import {
2-
matcherHint,
3-
stringify,
4-
RECEIVED_COLOR as receivedColor,
5-
} from 'jest-matcher-utils'
61
import {checkHtmlElement} from './utils'
72

83
export function toBeInTheDocument(element) {
@@ -14,7 +9,7 @@ export function toBeInTheDocument(element) {
149
element === null ? false : element.ownerDocument.contains(element)
1510

1611
const errorFound = () => {
17-
return `expected document not to contain element, found ${stringify(
12+
return `expected document not to contain element, found ${this.utils.stringify(
1813
element.cloneNode(true),
1914
)} instead`
2015
}
@@ -26,13 +21,14 @@ export function toBeInTheDocument(element) {
2621
pass,
2722
message: () => {
2823
return [
29-
matcherHint(
24+
this.utils.matcherHint(
3025
`${this.isNot ? '.not' : ''}.toBeInTheDocument`,
3126
'element',
3227
'',
3328
),
3429
'',
35-
receivedColor(this.isNot ? errorFound() : errorNotFound()),
30+
// eslint-disable-next-line babel/new-cap
31+
this.utils.RECEIVED_COLOR(this.isNot ? errorFound() : errorNotFound()),
3632
].join('\n')
3733
},
3834
}

src/to-be-in-the-dom.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import {matcherHint, printReceived} from 'jest-matcher-utils'
21
import {checkHtmlElement, deprecate} from './utils'
32

43
export function toBeInTheDOM(element, container) {
@@ -19,10 +18,16 @@ export function toBeInTheDOM(element, container) {
1918
pass: container ? container.contains(element) : !!element,
2019
message: () => {
2120
return [
22-
matcherHint(`${this.isNot ? '.not' : ''}.toBeInTheDOM`, 'element', ''),
21+
this.utils.matcherHint(
22+
`${this.isNot ? '.not' : ''}.toBeInTheDOM`,
23+
'element',
24+
'',
25+
),
2326
'',
2427
'Received:',
25-
` ${printReceived(element ? element.cloneNode(false) : element)}`,
28+
` ${this.utils.printReceived(
29+
element ? element.cloneNode(false) : element,
30+
)}`,
2631
].join('\n')
2732
},
2833
}

src/to-be-invalid.js

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import {matcherHint, printReceived} from 'jest-matcher-utils'
21
import {checkHtmlElement, getTag} from './utils'
32

43
const FORM_TAGS = ['form', 'input', 'select', 'textarea']
@@ -33,10 +32,14 @@ export function toBeInvalid(element) {
3332
message: () => {
3433
const is = isInvalid ? 'is' : 'is not'
3534
return [
36-
matcherHint(`${this.isNot ? '.not' : ''}.toBeInvalid`, 'element', ''),
35+
this.utils.matcherHint(
36+
`${this.isNot ? '.not' : ''}.toBeInvalid`,
37+
'element',
38+
'',
39+
),
3740
'',
3841
`Received element ${is} currently invalid:`,
39-
` ${printReceived(element.cloneNode(false))}`,
42+
` ${this.utils.printReceived(element.cloneNode(false))}`,
4043
].join('\n')
4144
},
4245
}
@@ -52,10 +55,14 @@ export function toBeValid(element) {
5255
message: () => {
5356
const is = isValid ? 'is' : 'is not'
5457
return [
55-
matcherHint(`${this.isNot ? '.not' : ''}.toBeValid`, 'element', ''),
58+
this.utils.matcherHint(
59+
`${this.isNot ? '.not' : ''}.toBeValid`,
60+
'element',
61+
'',
62+
),
5663
'',
5764
`Received element ${is} currently valid:`,
58-
` ${printReceived(element.cloneNode(false))}`,
65+
` ${this.utils.printReceived(element.cloneNode(false))}`,
5966
].join('\n')
6067
},
6168
}

src/to-be-partially-checked.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import {matcherHint, printReceived} from 'jest-matcher-utils'
21
import {checkHtmlElement} from './utils'
32

43
export function toBePartiallyChecked(element) {
@@ -37,14 +36,14 @@ export function toBePartiallyChecked(element) {
3736
message: () => {
3837
const is = isPartiallyChecked() ? 'is' : 'is not'
3938
return [
40-
matcherHint(
39+
this.utils.matcherHint(
4140
`${this.isNot ? '.not' : ''}.toBePartiallyChecked`,
4241
'element',
4342
'',
4443
),
4544
'',
4645
`Received element ${is} partially checked:`,
47-
` ${printReceived(element.cloneNode(false))}`,
46+
` ${this.utils.printReceived(element.cloneNode(false))}`,
4847
].join('\n')
4948
},
5049
}

0 commit comments

Comments
 (0)