2014-12-26 5 views
2

저는 node.js를 처음 접했고 비동기식 프레임 워크로 작업 한 지 오래되었습니다.nodejs에서 비동기 호출과 함께 테스트 함수를 재사용하려면 어떻게해야합니까?

: 나는 nodejs/모카 /해야와 비슷한 뭔가를 시도하고있어

tests = { 
    1: [2, 3], 
    2: [3, 4], 
    7: [8, 9], 
} 

for input, expected_out in tests.items(): 
    out = myfunc(input) 
    assert(out == expected_out) 

을 : 절차 적 언어에서 같은 파이썬으로 테스트에 그들을 통해 루프 후 출력을 입력의 목록을 예상하기 쉽습니다

AssertionError: expected [ '11', '12' ] to be [ 2, 3 ] 
    + expected - actual 

    [ 
    + 2 
    + 3 
    - "11" 
    - "12" 
    ] 

내가 [ '11', '12']에서 오는 아무 생각하지만 스레드 안전 문제가 난다 : 는

var should = require('should'); 

function myfunc(x, cb) { var y = x + 1; var z = x + 2; cb([y, z]); }; 

describe('.mymethod()', function() { 
    this.timeout(10000); 
    it('should return the correct output given input', function(done) { 
     var testCases = { 
       1: [2, 3], 
       2: [3, 4], 
       7: [8, 9], 
      }; 

     for (input in testCases) { 
      myfunc(input, function (out) { 
       var ev = testCases[input]; 
       out.should.equal(ev); 
      }); 
     } 
    }) 
}) 

이 발생합니다.

이 예기치 않은 값이 어디에서 왔는지 설명 할 수 있습니까?

+1

당신은 (배열 비교) .equal 대신 .eql을 사용합니다 (단지 === inside). 그러나 .eql은 깊은 비교를합니다. –

답변

3

myfunc에 전달중인 inputString으로 간주됩니다. 이 대답을 한번보십시오.

Keys in Javascript objects can only be strings?

이 시도

, 여기

var should = require('should'); 

function myfunc(x, cb) { var y = x + 1; var z = x + 2; cb([y, z]); }; 

describe('.mymethod()', function() { 
    this.timeout(10000); 
    it('should return the correct output given input', function(done) { 
     var testCases = { 
      1: [2, 3], 
      2: [3, 4], 
      7: [8, 9], 
     }; 

     for (input in testCases) { 
      input = parseInt(input) 
      myfunc(input, function (out) { 
       var ev = testCases[input]; 
       out.should.equal(ev); 
      }); 
     } 
    }) 
}) 

, 나는 그것의 정수 값으로 input을 분석했다.