2016-07-17 2 views
0

무슨 일이 발생하는지 알아보기 위해 몇 가지 기본 테스트를 작성하여 콜백을 이해하려고합니다. 나는 이것을 실행하기 위해 모카를 사용하고 있습니다. 콜백을 처음 접했을뿐입니다. 그러나 이것이 왜 작동하지 않는지 나는 알 수 없습니다.노드/js의 REALLY 기본 콜백 이해

import fs from 'fs'; 


describe('named callbacks', function() { 
it('runs something using callbacks', function() { 

    function runTest() { 
     return fs.readFile('test.txt', onReadFile); 

     function onReadFile(err, data) { 
      if (err) { 
       console.log('error reading file', err); 
       return err; 
      } 
      fs.writeFile('testoutfile.txt', data, onWriteFile); 
     } 

     function onWriteFile(err, data) { 
      if (err) { 
       console.log('write error', err); 
       return err; 
      } 
      console.log('file written!', data); 
     } 

    } 

    runTest(); 
}); 
}); 

테스트를 실행하면 출력 파일이 만들어 지지만 아무것도 기록되지 않고 오류가 기록되지 않습니다.

필자는 위에서 아래로 프로그램을 작성하는 데 익숙합니다.이 콜백 정보는 나 같은 것을 혼란스럽게합니다. 나는 모든 콜백을 여기에 지정하여 논리를 따라 할 수 있습니다. 나는 이것이 왜 효과가 없는지 이해하고 싶다.

+5

동시에 테스트 프레임 워크를 다룰 필요없이 콜백을 이해할 것을 제안합니까? – Brad

+2

테스트 자체가 콜백을 기다리지 않습니다. – SLaks

+0

'안녕하세요 세상'이라고하는 test.txt의 내용입니다. – Coco

답변

0

테스트가 비동기임을 모카에 선언해야합니다. 약속을 반환하거나 done 콜백을 사용하는 두 가지 방법 중 하나로이 작업을 수행 할 수 있습니다. 당신이 코드는 후자에 빌려 준다 :

describe('named callbacks', function() { 
it('runs something using callbacks', function(done) { 

    function runTest() { 
     return fs.readFile('test.txt', onReadFile); 

     function onReadFile(err, data) { 
      if (err) { 
       console.log('error reading file', err); 
       done(err); 
      } 
      fs.writeFile('testoutfile.txt', data, onWriteFile); 
     } 

     function onWriteFile(err, data) { 
      if (err) { 
       console.log('write error', err); 
       done(err); 
      } 
      console.log('file written!', data); 
      done(); 
     } 

    } 

    runTest(); 
}); 
}); 

변경은 다음과 같습니다

  1. it에 전달 된 함수에 매개 변수로 done를 추가합니다.

  2. return errdone(err)으로 바꿉니다. 이것은 오류를 모카에게 넘깁니다.

  3. onWriteFile 기능 끝에 done()을 추가하십시오.