1+ import path from 'path'
12import chokidar from 'chokidar'
23import upath from 'upath'
34import debounce from 'lodash/debounce'
4- import { r , isString } from '@nuxt/utils'
5+ import { r , isString , isPureObject } from '@nuxt/utils'
56
67import Builder from '../src/builder'
78import { createNuxt } from './__utils__'
@@ -41,31 +42,51 @@ describe('builder: builder watch', () => {
4142
4243 const patterns = [
4344 '/var/nuxt/src/layouts' ,
44- '/var/nuxt/src/store' ,
4545 '/var/nuxt/src/middleware' ,
4646 '/var/nuxt/src/layouts/*.{vue,js,ts,tsx}' ,
4747 '/var/nuxt/src/layouts/**/*.{vue,js,ts,tsx}'
4848 ]
4949
50- expect ( r ) . toBeCalledTimes ( 5 )
50+ expect ( r ) . toBeCalledTimes ( 4 )
5151 expect ( r ) . nthCalledWith ( 1 , '/var/nuxt/src' , '/var/nuxt/src/layouts' )
52- expect ( r ) . nthCalledWith ( 2 , '/var/nuxt/src' , '/var/nuxt/src/store' )
53- expect ( r ) . nthCalledWith ( 3 , '/var/nuxt/src' , '/var/nuxt/src/middleware' )
54- expect ( r ) . nthCalledWith ( 4 , '/var/nuxt/src' , '/var/nuxt/src/layouts/*.{vue,js,ts,tsx}' )
55- expect ( r ) . nthCalledWith ( 5 , '/var/nuxt/src' , '/var/nuxt/src/layouts/**/*.{vue,js,ts,tsx}' )
52+ expect ( r ) . nthCalledWith ( 2 , '/var/nuxt/src' , '/var/nuxt/src/middleware' )
53+ expect ( r ) . nthCalledWith ( 3 , '/var/nuxt/src' , '/var/nuxt/src/layouts/*.{vue,js,ts,tsx}' )
54+ expect ( r ) . nthCalledWith ( 4 , '/var/nuxt/src' , '/var/nuxt/src/layouts/**/*.{vue,js,ts,tsx}' )
5655
57- expect ( upath . normalizeSafe ) . toBeCalledTimes ( 5 )
56+ expect ( upath . normalizeSafe ) . toBeCalledTimes ( 4 )
5857 expect ( upath . normalizeSafe ) . nthCalledWith ( 1 , '/var/nuxt/src/layouts' , 0 , patterns )
59- expect ( upath . normalizeSafe ) . nthCalledWith ( 2 , '/var/nuxt/src/store' , 1 , patterns )
60- expect ( upath . normalizeSafe ) . nthCalledWith ( 3 , '/var/nuxt/src/middleware' , 2 , patterns )
61- expect ( upath . normalizeSafe ) . nthCalledWith ( 4 , '/var/nuxt/src/layouts/*.{vue,js,ts,tsx}' , 3 , patterns )
62- expect ( upath . normalizeSafe ) . nthCalledWith ( 5 , '/var/nuxt/src/layouts/**/*.{vue,js,ts,tsx}' , 4 , patterns )
58+ expect ( upath . normalizeSafe ) . nthCalledWith ( 2 , '/var/nuxt/src/middleware' , 1 , patterns )
59+ expect ( upath . normalizeSafe ) . nthCalledWith ( 3 , '/var/nuxt/src/layouts/*.{vue,js,ts,tsx}' , 2 , patterns )
60+ expect ( upath . normalizeSafe ) . nthCalledWith ( 4 , '/var/nuxt/src/layouts/**/*.{vue,js,ts,tsx}' , 3 , patterns )
6361
6462 expect ( builder . createFileWatcher ) . toBeCalledTimes ( 1 )
6563 expect ( builder . createFileWatcher ) . toBeCalledWith ( patterns , [ 'add' , 'unlink' ] , expect . any ( Function ) , expect . any ( Function ) )
6664 expect ( builder . assignWatcher ) . toBeCalledTimes ( 1 )
6765 } )
6866
67+ test ( 'should watch store files' , ( ) => {
68+ const nuxt = createNuxt ( )
69+ nuxt . options . store = true
70+ nuxt . options . srcDir = '/var/nuxt/src'
71+ nuxt . options . dir = {
72+ layouts : '/var/nuxt/src/layouts' ,
73+ pages : '/var/nuxt/src/pages' ,
74+ store : '/var/nuxt/src/store' ,
75+ middleware : '/var/nuxt/src/middleware'
76+ }
77+ nuxt . options . build . watch = [ ]
78+
79+ const builder = new Builder ( nuxt , { } )
80+ builder . createFileWatcher = jest . fn ( )
81+ builder . assignWatcher = jest . fn ( ( ) => ( ) => { } )
82+ r . mockImplementation ( ( dir , src ) => src )
83+
84+ builder . watchClient ( )
85+
86+ expect ( r ) . toBeCalledTimes ( 5 )
87+ expect ( r ) . nthCalledWith ( 5 , '/var/nuxt/src' , '/var/nuxt/src/store' )
88+ } )
89+
6990 test ( 'should watch pages files' , ( ) => {
7091 const nuxt = createNuxt ( )
7192 nuxt . options . srcDir = '/var/nuxt/src'
@@ -86,10 +107,10 @@ describe('builder: builder watch', () => {
86107
87108 builder . watchClient ( )
88109
89- expect ( r ) . toBeCalledTimes ( 8 )
90- expect ( r ) . nthCalledWith ( 6 , '/var/nuxt/src' , '/var/nuxt/src/pages' )
91- expect ( r ) . nthCalledWith ( 7 , '/var/nuxt/src' , '/var/nuxt/src/pages/*.{vue,js,ts,tsx}' )
92- expect ( r ) . nthCalledWith ( 8 , '/var/nuxt/src' , '/var/nuxt/src/pages/**/*.{vue,js,ts,tsx}' )
110+ expect ( r ) . toBeCalledTimes ( 7 )
111+ expect ( r ) . nthCalledWith ( 5 , '/var/nuxt/src' , '/var/nuxt/src/pages' )
112+ expect ( r ) . nthCalledWith ( 6 , '/var/nuxt/src' , '/var/nuxt/src/pages/*.{vue,js,ts,tsx}' )
113+ expect ( r ) . nthCalledWith ( 7 , '/var/nuxt/src' , '/var/nuxt/src/pages/**/*.{vue,js,ts,tsx}' )
93114 } )
94115
95116 test ( 'should invoke generateRoutesAndFiles on file refresh' , ( ) => {
@@ -215,28 +236,39 @@ describe('builder: builder watch', () => {
215236
216237 test ( 'should watch files for restarting server' , ( ) => {
217238 const nuxt = createNuxt ( )
239+ nuxt . options . srcDir = '/var/nuxt/src'
240+ nuxt . options . dir = {
241+ layouts : '/var/nuxt/src/layouts' ,
242+ pages : '/var/nuxt/src/pages' ,
243+ store : '/var/nuxt/src/store' ,
244+ middleware : '/var/nuxt/src/middleware'
245+ }
218246 nuxt . options . watchers = {
219247 chokidar : { test : true }
220248 }
221249 nuxt . options . watch = [
222250 '/var/nuxt/src/watch/test'
223251 ]
224252 nuxt . options . serverMiddleware = [
225- '/var/nuxt/src/middleware/test' ,
253+ '/var/nuxt/src/serverMiddleware/test' ,
254+ { path : '/test' , handler : '/var/nuxt/src/serverMiddleware/test-handler' } ,
226255 { obj : 'test' }
227256 ]
228257 const builder = new Builder ( nuxt , { } )
229258 builder . ignore . ignoreFile = '/var/nuxt/src/.nuxtignore'
230- isString . mockImplementationOnce ( src => typeof src === 'string' )
259+ isString . mockImplementation ( src => typeof src === 'string' )
260+ isPureObject . mockImplementation ( obj => typeof obj === 'object' )
231261
232262 builder . watchRestart ( )
233263
234264 expect ( chokidar . watch ) . toBeCalledTimes ( 1 )
235265 expect ( chokidar . watch ) . toBeCalledWith (
236266 [
237- 'resolveAlias(/var/nuxt/src/middleware/test)' ,
267+ 'resolveAlias(resolvePath(/var/nuxt/src/serverMiddleware/test))' ,
268+ 'resolveAlias(resolvePath(/var/nuxt/src/serverMiddleware/test-handler))' ,
238269 'resolveAlias(/var/nuxt/src/watch/test)' ,
239- '/var/nuxt/src/.nuxtignore'
270+ '/var/nuxt/src/.nuxtignore' ,
271+ path . join ( '/var/nuxt/src/var/nuxt/src/store' ) // because store == false + using path.join()
240272 ] ,
241273 { test : true }
242274 )
@@ -246,6 +278,13 @@ describe('builder: builder watch', () => {
246278
247279 test ( 'should trigger restarting when files changed' , async ( ) => {
248280 const nuxt = createNuxt ( )
281+ nuxt . options . srcDir = '/var/nuxt/src'
282+ nuxt . options . dir = {
283+ layouts : '/var/nuxt/src/layouts' ,
284+ pages : '/var/nuxt/src/pages' ,
285+ store : '/var/nuxt/src/store' ,
286+ middleware : '/var/nuxt/src/middleware'
287+ }
249288 nuxt . options . watchers = {
250289 chokidar : { test : true }
251290 }
@@ -274,6 +313,13 @@ describe('builder: builder watch', () => {
274313
275314 test ( 'should ignore other events in watchRestart' , ( ) => {
276315 const nuxt = createNuxt ( )
316+ nuxt . options . srcDir = '/var/nuxt/src'
317+ nuxt . options . dir = {
318+ layouts : '/var/nuxt/src/layouts' ,
319+ pages : '/var/nuxt/src/pages' ,
320+ store : '/var/nuxt/src/store' ,
321+ middleware : '/var/nuxt/src/middleware'
322+ }
277323 nuxt . options . watchers = {
278324 chokidar : { test : true }
279325 }
0 commit comments