
Express, Next.js 및 KOA 라우팅 기능을 테스트하기위한 'HTTP'객체는 request 및 response 개체의 모형이 필요한 코드가있는 Node.js 웹 서버 응용 프로그램을 테스트하는 데 사용할 수 있습니다.
이 프로젝트는 NPM 패키지로 제공됩니다.
$ npm install node-mocks-http --save-dev
$ npm install @types/node @types/express --save-dev # when using TypeScript또는
$ yarn add node-mocks-http --dev
$ yarn add @types/node @types/express --dev # when using TypeScript패키지를 설치 한 후에는 테스트 파일에 다음을 포함합니다.
const httpMocks = require ( 'node-mocks-http' ) ; 다음과 같은 특급 경로가 있다고 가정합니다.
app . get ( '/user/:id' , routeHandler ) ;그리고 당신은 그 경로의 호출을 처리하는 기능을 만들었습니다.
const routeHandler = function ( request , response ) { ... } ; 선택한 테스트 프레임 워크를 사용하여 이와 같은 일부 코드로 routeHandler 기능을 쉽게 테스트 할 수 있습니다.
exports [ 'routeHandler - Simple testing' ] = function ( test ) {
const request = httpMocks . createRequest ( {
method : 'GET' ,
url : '/user/42' ,
params : {
id : 42
}
} ) ;
const response = httpMocks . createResponse ( ) ;
routeHandler ( request , response ) ;
const data = response . _getJSONData ( ) ; // short-hand for JSON.parse( response._getData() );
test . equal ( 'Bob Dog' , data . name ) ;
test . equal ( 42 , data . age ) ;
test . equal ( '[email protected]' , data . email ) ;
test . equal ( 200 , response . statusCode ) ;
test . ok ( response . _isEndCalled ( ) ) ;
test . ok ( response . _isJSON ( ) ) ;
test . ok ( response . _isUTF8 ( ) ) ;
test . done ( ) ;
} ; TypeScript의 타이핑은이 프로젝트와 함께 번들로 제공됩니다. 특히 .createRequest() , .createResponse() 및 .createMocks() 메소드가 입력되어 일반입니다. 명시 적으로 지정되지 않으면 Express 기반 요청/응답 개체를 반환합니다.
it ( 'should handle expressjs requests' , ( ) => {
const mockExpressRequest = httpMocks . createRequest ( {
method : 'GET' ,
url : '/user/42' ,
params : {
id : 42
}
} ) ;
const mockExpressResponse = httpMocks . createResponse ( ) ;
routeHandler ( request , response ) ;
const data = response . _getJSONData ( ) ;
test . equal ( 'Bob Dog' , data . name ) ;
test . equal ( 42 , data . age ) ;
test . equal ( '[email protected]' , data . email ) ;
test . equal ( 200 , response . statusCode ) ;
test . ok ( response . _isEndCalled ( ) ) ;
test . ok ( response . _isJSON ( ) ) ;
test . ok ( response . _isUTF8 ( ) ) ;
test . done ( ) ;
} ) ; 모의 요청 및 응답의 예상 유형 매개 변수는 nodejs http.IncomingRequest 인터페이스를 확장하거나 API Request 클래스를 페치하는 모든 유형을 기대합니다. 즉, 다른 프레임 워크에서 나오는 요청도 조롱 할 수도 있습니다. NextJS 요청의 예는 다음과 같습니다.
it ( 'should handle nextjs requests' , ( ) => {
const mockExpressRequest = httpMocks . createRequest < NextApiRequest > ( {
method : 'GET' ,
url : '/user/42' ,
params : {
id : 42
}
} ) ;
const mockExpressResponse = httpMocks . createResponse < NextApiResponse > ( ) ;
// ... the rest of the test as above.
} ) ;NextJS 새 승인의 요청을 조롱 할 수도 있습니다.
it ( 'should handle nextjs app reouter requests' , ( ) => {
const mockExpressRequest = httpMocks . createRequest < NextRequest > ( {
method : 'GET' ,
url : '/user/42' ,
params : {
id : 42
}
} ) ;
const mockExpressResponse = httpMocks . createResponse < NextResponse > ( ) ;
// ... the rest of the test as above.
} ) ; httpMocks.createRequest(options)
여기서 옵션은 다음 값 중 하나 인 객체 해시입니다.
| 옵션 | 설명 | 기본값 |
|---|---|---|
method | HTTP 방법을 요청하십시오 | '얻다' |
url | URL을 요청하십시오 | '' '' |
originalUrl | 원본 URL을 요청하십시오 | url |
baseUrl | 기본 URL을 요청하십시오 | url |
path | 요청 경로 | '' '' |
params | 매개 변수가있는 객체 해시 | {} |
session | 세션 값을 가진 객체 해시 | undefined |
cookies | 요청 쿠키가있는 객체 해시 | {} |
socket | 요청 소켓이있는 객체 해시 | {} |
signedCookies | 서명 된 쿠키가있는 물체 해시 | undefined |
headers | 요청 헤더가있는 객체 해시 | {} |
body | 바디와 물체 해시 | {} |
query | 쿼리 값이있는 객체 해시 | {} |
files | 값이있는 객체 해시 | {} |
이 함수에서 반환 된 객체는 또한 Express Request functions ( .accepts() , .is() , .get() , .range() ) 등을 지원합니다. 누락 된 기능에 대해서는 PR을 보내주십시오.
httpMocks . createResponse ( options ) ;여기서 옵션은 다음 값 중 하나 인 객체 해시입니다.
| 옵션 | 설명 | 기본값 |
|---|---|---|
locals | response 로컬 변수를 포함하는 객체 | {} |
eventEmitter | response 객체에 사용되는 이벤트 이미 터 | mockEventEmitter |
writableStream | response 객체에서 사용하는 쓰기 가능한 스트림 | mockWritableStream |
req | 응답중인 객체를 요청합니다 | 널 |
참고 :
node-mocks-http에 포함 된 기본 모의 이벤트 이미 터는 기능적 이벤트 이미 터가 아니므로 실제로 이벤트를 방출하지 않습니다. 이벤트 핸들러를 테스트하려면 자신의 이벤트 이미 터를 가져와야합니다.
예는 다음과 같습니다.
const httpMocks = require ( 'node-mocks-http' ) ;
const res = httpMocks . createResponse ( {
eventEmitter : require ( 'events' ) . EventEmitter
} ) ;
// ...
it ( 'should do something' , function ( done ) {
res . on ( 'end' , function ( ) {
assert . equal ( ... ) ;
done ( ) ;
} ) ;
} ) ;
// ...이것은 요청 본문을 보내고 '데이터'및 '종료'이벤트를 트리거하는 예입니다.
const httpMocks = require ( 'node-mocks-http' ) ;
const req = httpMocks . createRequest ( ) ;
const res = httpMocks . createResponse ( {
eventEmitter : require ( 'events' ) . EventEmitter
} ) ;
// ...
it ( 'should do something' , function ( done ) {
res . on ( 'end' , function ( ) {
expect ( response . _getData ( ) ) . to . equal ( 'data sent in request' ) ;
done ( ) ;
} ) ;
route ( req , res ) ;
req . send ( 'data sent in request' ) ;
} ) ;
function route ( req , res ) {
let data = [ ] ;
req . on ( 'data' , ( chunk ) => {
data . push ( chunk ) ;
} ) ;
req . on ( 'end' , ( ) => {
data = Buffer . concat ( data ) ;
res . write ( data ) ;
res . end ( ) ;
} ) ;
}
// ... httpMocks . createMocks ( reqOptions , resOptions ) ; createRequest 와 createResponse 합쳐집니다. 주어진 옵션 객체를 각 생성자에게 전달합니다. 속성 req 있는 객체를 반환합니다 res
우리는 큰 프레임 워크가없는 간단한 모의를 원했습니다.
우리는 또한 모의가 원래의 프레임 워크를 조롱하는 것처럼 행동하기를 원했지만 호출 후 값을 호출하고 검사하기 전에 값을 설정할 수있었습니다.
우리는 HTTP 모듈에서 더 많은 객체를 만들어내는 것을 포함 하여이 프로젝트에 가치를 가져다 줄 더 많은 자원 봉사자를 찾고 있습니다.
이 프로젝트는 조롱 해야하는 모든 기능을 다루지는 않지만 좋은 출발입니다. 풀 요청을 보내 주시면 팀 구성원이 적시에 합병 할 것입니다.
기여하고 싶다면 기고 가이드 라인을 읽으십시오.
대부분의 릴리스는 모의로 버그를 수정하거나 Node.js가 제공하고 Express에 의해 확장되는 실제 Request 및 Response 개체와 유사한 기능을 추가합니다.
자세한 내용은 릴리스 기록을 참조하십시오.
MIT에 따라 라이센스.