2011-09-25 4 views
15

노드 애플리케이션의 부분에 대한 단위 테스트를 작성하려고합니다. 내 ORM에 몽구스를 사용하고 있습니다.Mongoose Node.JS 앱을 테스트하십시오.

나는 Mongoose와 Node로 테스트하는 방법을 모색했지만 아무 것도 제공하지 않았다. 솔루션/프레임 워크는 모두 완전한 스택 인 것처럼 보이거나 조롱하는 것을 언급하지 않습니다.

테스트에서 정적 데이터를 반환 할 수 있도록 몽구스 DB를 모방 할 수있는 방법이 있습니까? 차라리 테스트 DB를 설정하고 모든 단위 테스트를위한 데이터로 채울 필요가 없습니다.

누구에게도이 문제가 발생 했습니까?

답변

6

내 코드를 약간 구조화하여 해결했습니다. 내 모든 몽구스 관련 자료를 "저장", "찾기", "삭제"등의 API를 사용하여 별도의 클래스로 유지하고 있으며 다른 클래스는 데이터베이스에 직접 액세스하지 않습니다. 그런 다음 데이터에 의존하는 테스트에서 이들을 조롱합니다.

반환 된 실제 개체와 비슷한 것을했습니다. 내가 몽구스로 가지고있는 모든 모델에 대해 필자는 해당 클래스를 랩핑하고 필드에 대한 액세스 메소드를 제공합니다. 그것들은 또한 쉽게 조롱 당한다.

+11

코드의 예가 있습니까? – bouncingHippo

8

나도 대답을 찾고 나서 여기서 끝났습니다. 이것이 내가 한 것입니다 :

저는 mockery을 사용하여 시작했는데, 내 모델이 속한 모듈을 조롱했습니다. 각 모델을 속성으로 사용하여 내 모의 모듈을 작성했습니다. 이러한 속성은 실제 모델을 감싸므로 테스트중인 코드에 대해 자식 속성이 존재합니다. 그런 다음 저장과 같은 테스트를 위해 조작하려는 메서드를 재정의합니다. 이것은 조롱을 취소 할 수있는 조롱의 장점이있었습니다.

하지만 ...

정말하지 않는 모든 모델에 대한 래퍼 속성을 작성하는 조롱을 취소에 대해 충분히 관심. 이제 모듈을 필요로하고 조작하고 싶은 함수를 오버라이드합니다. 문제가된다면 아마 테스트를 별도의 프로세스로 실행할 것입니다. 내 시험의 준비 부분에서

: 언급 할 가치도

// mock out database saves 
var db = require("../../schema"); 
db.Model1.prototype.save = function(callback) { 
    console.log("in the mock"); 
    callback(); 
}; 
db.Model2.prototype.save = function(callback) { 
    console.log("in the mock"); 
    callback("mock staged an error for testing purposes"); 
}; 
+0

NodeJS에서이 작업을 수행 했습니까? – bouncingHippo

+0

'schema.js'에 무엇이 있습니까? – Michelle

+0

@Michelle 아마도 몽구스 스키마 정의 – sshow

6

:
mockgoose - 테스트 목적, 몽구스을 조롱 인 - 메모리 DB.
monckoose - 비슷하지만 다른 접근 방식을 취합니다 (가짜 드라이버 구현). Monckoose는 2015 년 3 월 현재 게시되지 않은 것으로 보입니다.

+0

두 번째 링크가 죽었으므로 아직 게시되지 않은 것으로 보입니다. –

+0

@KevinB 감사합니다. –

관련 문제