nodeunit
이 모든 테스트를 통과 한 후에 코드를 실행해야합니다. 모든 테스트가 실행 된 후 일부 Firebase
래퍼를 테스트하고 Firebase
참조 블록을 종료합니다.nodeunit이 모든 테스트를 마쳤다는 것을 알 수있는 방법이 있습니까?
모든 단위 테스트가 통과 된 후 일부 후크 또는 콜백을 찾고 있습니다. 그래서 Firebase
프로세스를 종료하려면 nodeunit
을 종료 할 수 있습니다.
nodeunit
이 모든 테스트를 통과 한 후에 코드를 실행해야합니다. 모든 테스트가 실행 된 후 일부 Firebase
래퍼를 테스트하고 Firebase
참조 블록을 종료합니다.nodeunit이 모든 테스트를 마쳤다는 것을 알 수있는 방법이 있습니까?
모든 단위 테스트가 통과 된 후 일부 후크 또는 콜백을 찾고 있습니다. 그래서 Firebase
프로세스를 종료하려면 nodeunit
을 종료 할 수 있습니다.
올바른 방법이 없습니다.
내 일시적으로 솔루션이 : 내 경우
//Put a *LAST* test to clear all if needed:
exports.last_test = function(test){
//do_clear_all_things_if_needed();
setTimeout(process.exit, 500); // exit in 500 milli-seconds
test.done();
}
, 이것은 반드시 DB 연결을 만드는 데 사용됩니다 또는 일부 네트워크는 어떤 방식으로 살해 연결합니다. 그 이유는 노드 유닛이 일련의 테스트를 실행하기 때문입니다.
좋은 방법이 아니더라도 시험을 으로 끝내는 것이 최선의 방법은 아닙니다. nodeunit를 들어
는 0.9.0
노드 단위 문서마다 모든 테스트가 실행 된 후에 콜백을 제공하는 방법을 찾지 못하는 것 같습니다.
나는 예를 들어, 당신은 그래서 당신이 작업에 테스트 워크 플로를 만들 수 있습니다 Grunt를 사용하는 것이 좋습니다 :
npm install grunt --save-dev
npm install -g grunt-cli
다음과 같이 Gruntfile.js를 만듭니다.
,210module.exports = function(grunt) {
grunt.initConfig({
nodeunit : {
all : ['tests/*.js'] //point to where your tests are
}
});
grunt.loadNpmTasks('grunt-contrib-nodeunit');
grunt.registerTask('test', [
'nodeunit'
]);
};
다음에 툴툴 거리는 소리 파일을 변경하여 검사 한 후 실행됩니다 사용자 지정 작업 만들기 :
module.exports = function(grunt) {
grunt.initConfig({
nodeunit : {
all : ['tests/*.js'] //point to where your tests are
}
});
grunt.loadNpmTasks('grunt-contrib-nodeunit');
//this is just an example you can do whatever you want
grunt.registerTask('generate-build-json', 'Generates a build.json file containing date and time info of the build', function() {
fs.writeFileSync('build.json', JSON.stringify({
platform: os.platform(),
arch: os.arch(),
timestamp: new Date().toISOString()
}, null, 4));
grunt.log.writeln('File build.json created.');
});
grunt.registerTask('test', [
'nodeunit',
'generate-build-json'
]);
};
가 최근 들어 grunt test
필자의 문제점은 모든 테스트가 완료된 후에도 실행중인 Firebase 참조와 관련이 있으며 완료를 방해합니다. 따라서 나는 바로 그 뒤에 약간의 하우스 키핑을 할 필요가있다. 나는 꿀꿀 거리는 일이 여기 도움이되지 않습니다. – webduvet
Humm ... Firebase이 무엇인지 잘 모르겠지만 테스트가 끝나지 않았다면 IMO에 질문을 다시 말해야한다고 생각합니다. – renatoargh
테스트가 모두 완료되면 Firebase 연결로 인해 프로세스가 종료되지 않습니다. 내가 원했던 것은 모든 테스트가 통과되고 nodeunit가 종료되기 전에 코드를 실행할 수있는 고리가 있는지를 아는 것입니다. 나는 내 질문을 편집 할 것이다. – webduvet
과 테스트 작업을 실행을 프로젝트에서 우리는 exports
을 반복하여 테스트를 계산 한 다음 tearDown
을 호출하여 완료를 계산합니다. 마지막 테스트가 끝나면 process.exit()를 호출합니다.
See the spec 자세한 내용은 이 파일의 끝에 (모든 테스트가 내보내기에 추가 된 후) 수행되었음을 유의하십시오.
(function(exports) {
// firebase is holding open a socket connection
// this just ends the process to terminate it
var total = 0, expectCount = countTests(exports);
exports.tearDown = function(done) {
if(++total === expectCount) {
setTimeout(function() {
process.exit();
}, 500);
}
done();
};
function countTests(exports) {
var count = 0;
for(var key in exports) {
if(key.match(/^test/)) {
count++;
}
}
return count;
}
})(exports);
제 경우에는 작동하지 않습니다. ** exports.tearDown **에서 각 테스트가 실행되었습니다. –
네, 매번 호출됩니다. 그 이유는 우리가 카운트를 유지하고 마지막 테스트 후에 티 아웃 만 실행하는 이유입니다. – Kato
나는이 솔루션을 처리하는 방법을 다른 해결책을 가로 질러왔다. 나는 여기서 모든 대답이 정확하다고 말해야한다. 그러나 grunt를 조사 할 때 Grunt는 기자를 통해 nodeunit 테스트를 실행하고 모든 테스트가 완료되면 콜백 옵션을 제공한다는 사실을 알게되었습니다.그것은 다음과 같은 일을 할 수있다 :
폴더에
test_scripts/
some_test.js
같은 것을 포함 할 수
test.js가 :
//loads default reporter, but any other can be used
var reporter = require('nodeunit').reporters.default;
// safer exit, but process.exit(0) will do the same in most cases
var exit = require('exit');
reporter.run(['test/basic.js'], null, function(){
console.log(' now the tests are finished');
exit(0);
});
스크립트를 추가 할 수는의 스크립트 객체
에package.json
을 가정 해 봅시다하기
"scripts": {
"nodeunit": "node scripts/some_test.js",
},
이제는
some_tests.js에서 16,npm run nodeunit
시험은 체인 될 수 있거나 설치 및 분해를 사용하도록 질문에 NPM
대답을한다하여 하나 하나를 실행할 수 있습니다. 루트 수준에서 이들을 선언하면 각 테스트마다 실행되므로 얼마나 많은 테스트가 실행되었는지와 완료되었는지를 확인할 수 있습니다. 그러나 이것은 [xy 문제] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem/66378#66378)입니다. 당신의 진짜 질문은 왜 당신의 테스트 유닛이 멈추는가와 왜 그렇게하지 못하도록하는 것입니까? 좀 더 구체적이고 사용자가 재현 할 수있는 것을 제공하는 데 도움이 될 것입니다. – Kato
실제로 문제를 해결할 수있는 좋은 대답을 주셨습니다. – webduvet