@@ -22,9 +22,26 @@ describe('TypeScript Vue Extension', () => {
22
22
await sandbox . cleanup ( ) ;
23
23
} ) ;
24
24
25
- it . each ( [ { async : false , typescript : '^3.8.0' , tsloader : '^7.0.0' } ] ) (
25
+ it . each ( [
26
+ {
27
+ async : false ,
28
+ typescript : '^3.8.0' ,
29
+ tsloader : '^7.0.0' ,
30
+ vueloader : '^15.8.3' ,
31
+ vue : '^2.6.11' ,
32
+ compiler : 'vue-template-compiler' ,
33
+ } ,
34
+ {
35
+ async : true ,
36
+ typescript : '^3.8.0' ,
37
+ tsloader : '^7.0.0' ,
38
+ vueloader : 'v16.0.0-beta.3' ,
39
+ vue : '^3.0.0-beta.14' ,
40
+ compiler : '@vue/compiler-sfc' ,
41
+ } ,
42
+ ] ) (
26
43
'reports semantic error for %p' ,
27
- async ( { async, typescript, tsloader } ) => {
44
+ async ( { async, typescript, tsloader, vueloader , vue , compiler } ) => {
28
45
await sandbox . load ( [
29
46
await readFixture ( join ( __dirname , 'fixtures/environment/typescript-vue.fixture' ) , {
30
47
FORK_TS_CHECKER_WEBPACK_PLUGIN_VERSION : JSON . stringify (
@@ -35,11 +52,48 @@ describe('TypeScript Vue Extension', () => {
35
52
WEBPACK_VERSION : JSON . stringify ( '^4.0.0' ) ,
36
53
WEBPACK_CLI_VERSION : JSON . stringify ( WEBPACK_CLI_VERSION ) ,
37
54
WEBPACK_DEV_SERVER_VERSION : JSON . stringify ( WEBPACK_DEV_SERVER_VERSION ) ,
55
+ VUE_LOADER_VERSION : JSON . stringify ( vueloader ) ,
56
+ VUE_VERSION : JSON . stringify ( vue ) ,
57
+ VUE_COMPILER : JSON . stringify ( compiler ) ,
38
58
ASYNC : JSON . stringify ( async ) ,
39
59
} ) ,
40
60
await readFixture ( join ( __dirname , 'fixtures/implementation/typescript-vue.fixture' ) ) ,
41
61
] ) ;
42
62
63
+ if ( vue === '^2.6.11' ) {
64
+ await sandbox . write (
65
+ 'src/index.ts' ,
66
+ [
67
+ "import Vue from 'vue'" ,
68
+ "import App from './App.vue'" ,
69
+ '' ,
70
+ 'new Vue({' ,
71
+ ' render: h => h(App)' ,
72
+ "}).$mount('#app')" ,
73
+ ] . join ( '\n' )
74
+ ) ;
75
+ await sandbox . write (
76
+ 'src/vue-shim.d.ts' ,
77
+ [
78
+ 'declare module "*.vue" {' ,
79
+ ' import Vue from "vue";' ,
80
+ ' export default Vue;' ,
81
+ '}' ,
82
+ ] . join ( '\n' )
83
+ ) ;
84
+ } else {
85
+ await sandbox . write (
86
+ 'src/index.ts' ,
87
+ [
88
+ "import { createApp } from 'vue'" ,
89
+ "import App from './App.vue'" ,
90
+ '' ,
91
+ "createApp(App).mount('#app')" ,
92
+ ] . join ( '\n' )
93
+ ) ;
94
+ await sandbox . write ( 'src/vue-shim.d.ts' , 'declare module "*.vue";' ) ;
95
+ }
96
+
43
97
const driver = createWebpackDevServerDriver (
44
98
sandbox . spawn ( 'npm run webpack-dev-server' ) ,
45
99
async
@@ -49,7 +103,7 @@ describe('TypeScript Vue Extension', () => {
49
103
// first compilation is successful
50
104
await driver . waitForNoErrors ( ) ;
51
105
52
- // let's modify user model file
106
+ // modify user model file
53
107
await sandbox . patch (
54
108
'src/component/LoggedIn.vue' ,
55
109
"import User, { getUserName } from '@/model/User';" ,
@@ -60,43 +114,43 @@ describe('TypeScript Vue Extension', () => {
60
114
errors = await driver . waitForErrors ( ) ;
61
115
expect ( errors ) . toEqual ( [
62
116
[
63
- 'ERROR in src/component/LoggedIn.vue 28:24-35 ' ,
117
+ 'ERROR in src/component/LoggedIn.vue 27:21-32 ' ,
64
118
"TS2304: Cannot find name 'getUserName'." ,
119
+ ' 25 | const user: User = this.user;' ,
65
120
' 26 | ' ,
66
- ' 27 | get userName() {' ,
67
- " > 28 | return this.user ? getUserName(this.user) : '';" ,
68
- ' | ^^^^^^^^^^^' ,
69
- ' 29 | }' ,
70
- ' 30 | ' ,
71
- ' 31 | async logout() {' ,
121
+ " > 27 | return user ? getUserName(user) : '';" ,
122
+ ' | ^^^^^^^^^^^' ,
123
+ ' 28 | }' ,
124
+ ' 29 | },' ,
125
+ ' 30 | async logout() {' ,
72
126
] . join ( '\n' ) ,
73
127
] ) ;
74
128
75
- // let's fix it
129
+ // fix it
76
130
await sandbox . patch (
77
131
'src/component/LoggedIn.vue' ,
78
- "return this. user ? getUserName(this. user) : '';" ,
79
- "return this. user ? `${this. user.firstName} ${this. user.lastName}` : '';"
132
+ "return user ? getUserName(user) : '';" ,
133
+ "return user ? `${user.firstName} ${user.lastName}` : '';"
80
134
) ;
81
135
82
136
await driver . waitForNoErrors ( ) ;
83
137
84
- // let's modify user model file again
138
+ // modify user model file again
85
139
await sandbox . patch ( 'src/model/User.ts' , ' firstName?: string;\n' , '' ) ;
86
140
87
141
// not we should have an error about missing firstName property
88
142
errors = await driver . waitForErrors ( ) ;
89
143
expect ( errors ) . toEqual ( [
90
144
[
91
- 'ERROR in src/component/LoggedIn.vue 28:37-46 ' ,
145
+ 'ERROR in src/component/LoggedIn.vue 27:29-38 ' ,
92
146
"TS2339: Property 'firstName' does not exist on type 'User'." ,
147
+ ' 25 | const user: User = this.user;' ,
93
148
' 26 | ' ,
94
- ' 27 | get userName() {' ,
95
- " > 28 | return this.user ? `${this.user.firstName} ${this.user.lastName}` : '';" ,
96
- ' | ^^^^^^^^^' ,
97
- ' 29 | }' ,
98
- ' 30 | ' ,
99
- ' 31 | async logout() {' ,
149
+ " > 27 | return user ? `${user.firstName} ${user.lastName}` : '';" ,
150
+ ' | ^^^^^^^^^' ,
151
+ ' 28 | }' ,
152
+ ' 29 | },' ,
153
+ ' 30 | async logout() {' ,
100
154
] . join ( '\n' ) ,
101
155
[
102
156
'ERROR in src/model/User.ts 11:16-25' ,
0 commit comments