Mi sto imbattendo in quella che penso sia una condizione di competizione tra i file di salvataggio di Vim e Karma che sta eseguendo nuovamente i miei test di unità Jasmine. Ecco una sequenza di corse quattro prove che dimostra il sintomo (ho troncato i lunghissimi percorsi nel log degli errori):Come faccio a mettere in pausa la funzione di auto-controllo di Karma prima di eseguire i test?
$ karma start karma.conf.js --auto-watch
[... snip a lot of coding and test running ...]
PhantomJS 1.6 (Linux) LOG: 'Running tests at 2013-08-14T08:19:57.252Z'
PhantomJS 1.6 (Linux): Executed 4 of 4 SUCCESS (0.307 secs/0.013 secs)
PhantomJS 1.6 (Linux) LOG: 'Running tests at 2013-08-14T08:20:09.866Z'
PhantomJS 1.6 (Linux): Executed 4 of 4 SUCCESS (0.288 secs/0.012 secs)
PhantomJS 1.6 (Linux) LOG: 'Running tests at 2013-08-14T08:20:14.366Z'
PhantomJS 1.6 (Linux) controller should have a breadcrumb after $routeChangeSuccess FAILED
Error: No module: myapp.question
at /home/rmunn/.../angular.js:1124
at ensure (/home/rmunn/.../angular.js:1065)
at module (/home/rmunn/.../angular.js:1296)
at /home/rmunn/.../angular.js:2806
TypeError: 'undefined' is not an object (evaluating 'rootScope.$broadcast')
at /home/rmunn/.../unit/controllersSpec.js:35
PhantomJS 1.6 (Linux): Executed 4 of 4 (1 FAILED) (0.312 secs/0.014 secs)
PhantomJS 1.6 (Linux) LOG: 'Running tests at 2013-08-14T08:20:28.588Z'
PhantomJS 1.6 (Linux): Executed 4 of 4 SUCCESS (0.287 secs/0.013 secs)
L'unico cambiamento che ho fatto per far scattare queste quattro corse è stata aggiunta e la rimozione spazi bianchi dal file question.js
; non ci sono state sostanziali modifiche al codice, ma il # 3 non è riuscito dove sono state eseguite le operazioni 1, 2 e 4.
La configurazione di My Vim è configurata per conservare i file di backup e, per impostazione predefinita, Vim conserva i file di backup rinominando il file originale e scrivendone uno nuovo. (Tranne in determinate condizioni, che non si applicano qui). Quello che penso stia accadendo è che sto innescando una condizione di gara: Vim rinomina question.js
(o qualsiasi altro file che ho appena modificato), Karma rileva quel cambiamento e inizia a eseguire i test, e poiché ho così pochi test in questo momento, i test tutti eseguire prima che lo scheduler dei processi di Linux riceva il controllo su Vim. Una volta che Vim viene programmato di nuovo, scrive il nuovo contenuto di question.js
, ma a quel punto è troppo tardi per il test Jasmine che dipende da question.js
esistente e non vuoto.
Potrei risolvere il problema configurando Vim per non conservare i file di backup, ma preferirei non correre questo rischio. C'è un motivo per cui utilizzo i file di backup, dopo tutto. Quindi c'è un modo per dire a Karma "quando rilevi un cambio di file, pausa per N millisecondi, quindi esegui i test unitari"? Mentre sarebbe una soluzione a forza bruta, è risolvere questa particolare condizione di gara. O se qualcuno ha altre idee intelligenti da offrire, mi piacerebbe sentire anche quelle.
Would impostazione ' 'backupdir'' ad un altro, specifiche, aiuto directory? – romainl
Ho già impostato '' backupdir'' su ~/.vim/.backup (o meglio, [Vim Config of Champions] di Jeremy Mack (https://github.com/mutewinter/dot_vim) ha impostato ''backupdir'' per me). Il problema è che Karma si sta attivando sul file originale "scomparendo" quando si sposta nella directory di backup, e quindi i test a volte vengono eseguiti prima che Vim riesca a ricreare il file. – rmunn
OK. Probabilmente è fuori discussione ma non è una buona idea usare la configurazione di qualcun altro. – romainl