/
next-script-for-ga.unit.test.js
129 lines (120 loc) · 3.82 KB
/
next-script-for-ga.unit.test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
const rule = require('@next/eslint-plugin-next/lib/rules/next-script-for-ga')
const RuleTester = require('eslint').RuleTester
const ERROR_MSG =
'Use the Script component for loading third party scripts. See: https://nextjs.org/docs/messages/next-script-for-ga.'
RuleTester.setDefaultConfig({
parserOptions: {
ecmaVersion: 2018,
sourceType: 'module',
ecmaFeatures: {
modules: true,
jsx: true,
},
},
})
var ruleTester = new RuleTester()
ruleTester.run('sync-scripts', rule, {
valid: [
`import Script from 'next/experimental-script'
export class Blah extends Head {
render() {
return (
<div>
<h1>Hello title</h1>
<Script>
{\`(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-XXXXX-Y', 'auto');
ga('send', 'pageview');
})\`}
</Script>
</div>
);
}
}`,
`import Script from 'next/experimental-script'
export class Blah extends Head {
render() {
return (
<div>
<h1>Hello title</h1>
<Script>
{\`window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
ga('create', 'UA-XXXXX-Y', 'auto');
ga('send', 'pageview');
})\`}
</Script>
</div>
);
}
}`,
`export class Blah extends Head {
render() {
return (
<div>
<h1>Hello title</h1>
<script dangerouslySetInnerHTML={{}} />
</div>
);
}
}`,
],
invalid: [
{
code: `
export class Blah extends Head {
render() {
return (
<div>
<h1>Hello title</h1>
<script dangerouslySetInnerHTML={{
__html: \`
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-XXXXX-Y', 'auto');
ga('send', 'pageview');
\`,
}}/>
</div>
);
}
}`,
errors: [
{
message: ERROR_MSG,
type: 'JSXOpeningElement',
},
],
},
{
code: `
export class Blah extends Head {
render() {
return (
<div>
<h1>Hello title</h1>
<script dangerouslySetInnerHTML={{
__html: \`
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
ga('create', 'UA-XXXXX-Y', 'auto');
ga('send', 'pageview');
\`,
}}/>
<script async src='https://www.google-analytics.com/analytics.js'></script>
</div>
);
}
}`,
errors: [
{
message: ERROR_MSG,
type: 'JSXOpeningElement',
},
],
},
],
})