2012-03-22 4 views
0

모듈을 테스트 중이며 해당 모듈 내에서 종속성을 조롱하고 싶습니다. 나는 할 수있다 경우 나, 내 시나리오를 프레임 보자이 기능을 Jasmine이나 Sinon과 함께 모의 할 수있는 방법이 있습니까?

을 내 모듈 그래서

myModule.prototype.func = function(callback) { 
    complexObj.doStuff('foo', function(err) { 
     callback(err, 'stuff'); 
    }); 
}; 

, 나는 기본적으로 complexObj을 조롱하기 위해 노력하고있어. 이 경우 객체 전체를 조롱하거나 함수 doStuff 만 중요합니다. doStuff은 웹 서비스 또는 파일 시스템과 상호 작용하는 것으로 가정합니다. complexObj은 의존성 주사에 의해 myModule에 주사되고있다. 나는 조롱하거나 객체와 기능을 스텁하려고 재스민과 Sinon를 사용하여 봤는데,하지만 난 운이 없었다, 그래서 좀 미봉책 것 같은 무언가에 의존했습니다에서

내 사양 : 당신이 볼 수

describe('Testing myModule', function() { 
    it('should do stuff', function() { 
     ComplexObj.prototype.doStuff = function(arg, callback) { 
      callback(null); // If no errors, 'doStuff' returns null indicating no errors 
     }; 

     var complexObj = new ComplexObj(); 

     new myModule(complexObj).func(function(err, results) { 
      // Set up expectations... 
     }); 
    }); 
}); 

그래서, 나는 ComplexObj 객체의 doStuff 기능을 -mocking 사이비입니다. ComplexObj 또는 doStuff 함수에 대해 염려하지 않으므로 func에 'null'이라는 콜백을 호출하면 doStuff에 오류가 없었습니다. 앞서 언급했듯이이 문제를 해결할 더 좋은 방법이 있어야한다고 생각합니다. 제안?

var complexObj = {doStuff: null}; 
spyOn(complexObj, 'doStuff'); 
new myModule(complexObj).func(function(err, results) { 
    expect(complexObj.doStuff).toHaveBeenCalledWith(args, callback); 
}); 

편집 :을 또는 당신은 doStuff 조롱 여러분의 기대에 설정할 수 있습니다 : 재스민와

답변

1

, 당신은 이런 식으로 뭔가를 할 것이라고는 expect``에 가장 좋은 방법

var complexObj = {doStuff: null}; 
spyOn(complexObj, 'doStuff').andCallFake(function(args, callback) { 
    expect(args).toEqual(/*...*/); 
    expect(callback).toEqual(/*...*/); 
    callback(); 
}); 
new myModule(complexObj).func(function(err, results) { 
    expect(complexObj.doStuff).toHaveBeenCalled(); 
}); 
+0

인가를 가짜 가짜? doStuff가 호출되지 않기 때문에 실행되지 않을 것이라는 가정은 잘못된 가정을 초래할 것이라고 나는 예상한다. 나는 가짜에 vars를 설정하고 함수를 호출 한 후 해당 vars에 물건을 기대하는 경향이 있습니다. – Giszmo

관련 문제