2014-02-20 3 views
5

일부 파일을 저장할 때마다 테스트를 실행하려고합니다. 여기에 꿀꺽 시계입니다 :jasmine을 gulp.watch와 함께 사용하는 방법

gulp.task('jasmine', function() { 
gulp.src('spec/nodejs/*Spec.js') 
    .pipe(jasmine({verbose:true, includeStackTrace: true})); 
}); 
gulp.task('watch', function() { 
    gulp.watch(['app/*.js', 'app/!(embed)**/*.js','spec/nodejs/*.js'], ['jasmine']); 
}); 

예 응용 프로그램을 테스트하려면/maps.js 나는 사양/nodejs/mapsSpec.js이 같은 파일을 만드는거야 : 나는 사양을 변경하는 경우

'use strict'; 
var maps = require('../../app/maps'); 
describe('/maps related routes', function(){ 
    it('should ...', function(){...} 
... 

모든 것이 잘 작동하고 있습니다. app/maps.js 파일을 수정하면 테스트가 트리거됩니다. 다시 수정하면 테스트가 시작되지만 수정 내용이 적용되지 않습니다. 예를 들어, 두 번째로 console.log ('foo')를 추가하면 꿀꺽 꿀꺽 거리는 시간을 다시 시작하고 다시 저장하기 전까지는 볼 수 없습니다. gulp.watch와 함께 사용할 때 자스민을 한 번만 실행하면됩니다.

나는 그것이 꿀꺽 꿀꺽 마시는 과정에서 nodejs에 의해 캐쉬되기 때문이다. 어떻게해야합니까?

+0

가 어떤 파일을하는 앱 폴더 아래에 수정됩니다

또한에 대해 글을 썼다. –

+0

지도 파일 (질문을 편집했습니다) – toutpt

+0

시계 작업을 다시 작성하십시오 :'gulp.watch ([ 'app/**/*. js', '! **/embed/**'], [ 'jasmine ']);' –

답변

4

나는 꿀꺽 - 자스민의 코드를 살펴했다. 문제는 캐시의 유일한 파일이 Specs.js 파일이라는 것입니다. 자식의 캐시 (테스트 할 reqquired 파일)는 지워지지 않습니다. 당신이 삭제되기 전에 코드의 다음 블록을 넣으면

delete require.cache[require.resolve(path.resolve(file.path))]; 

, 당신은 그것을 모든 아이들의 캐시를 삭제 한 것이다됩니다 꿀꺽 - 자스민의하는 index.js 내

캐시를 삭제하는 행이다 파일을 저장할 때마다 올바르게 실행됩니다.

var files = require.cache[require.resolve(path.resolve(file.path))]; 
if(typeof files !== 'undefined') { 
    for(var i in files.children) { 
     delete require.cache[ files.children[i].id ]; 
    } 
} 

node_modules에서이를 변경할 수 있습니다. 나는 풀 요청을 할 것이므로, 가까운 장래에 이것은 영구적으로 해결 될 것이다. http://navelpluisje.nl/entry/fix-cache-problem-jasmine-tests-with-gulp

+0

병합 시점을 알려줍니다. – toutpt

1

이 문제에 대한 해결책을 찾지 못했지만 gulp-shell 작업을 통해 해결할 수 있습니다.

npm install gulp-shell --save-dev 

다음

var shell = require('gulp-shell'); 
... 
gulp.task('jasmine', function() { 
gulp.src('spec/nodejs/*Spec.js') 
    .pipe(shell('minijasminenode spec/*Spec.js')); 
}); 

당신은 또한 직접 종속성으로 설치 자스민 필요합니다 (꿀꺽 - 자스민 minijasminenode 사용)

+0

좋은 일이지만 근데 내가 왜 minijasmine 노드가 필요한지 이해가 안되요. 나는 우리가 './node_modules/.bin/jasmine-node'를 사용할 수 있다고 믿는다. – toutpt