
MOCK 'HTTP' Objetos para probar las funciones de enrutamiento Express, Next.js y KOA, pero podrían usarse para probar cualquier aplicación Node.js Web Server que tenga código que requiera maquetas de los objetos request y response .
Este proyecto está disponible como un paquete NPM.
$ npm install node-mocks-http --save-dev
$ npm install @types/node @types/express --save-dev # when using TypeScripto
$ yarn add node-mocks-http --dev
$ yarn add @types/node @types/express --dev # when using TypeScriptDespués de instalar el paquete, incluya lo siguiente en sus archivos de prueba:
const httpMocks = require ( 'node-mocks-http' ) ; Supongamos que tiene la siguiente ruta expresa:
app . get ( '/user/:id' , routeHandler ) ;Y ha creado una función para manejar la llamada de esa ruta:
const routeHandler = function ( request , response ) { ... } ; Puede probar fácilmente la función routeHandler con algún código como este utilizando el marco de prueba de su elección:
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 ( ) ;
} ; Las tipos de mecanografiado se agrupan con este proyecto. En particular, los métodos .createRequest() , .createResponse() y .createMocks() se escriben y son genéricos. A menos que se especifique explícitamente, devolverán un objeto de solicitud/respuesta basado en 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 ( ) ;
} ) ; El parámetro de tipo esperado en la solicitud y la respuesta simulada espera cualquier tipo que extienda la interfaz NodeJS http.IncomingRequest o la clase de Request de API de obtención. Esto significa que también puede burlarse de las solicitudes provenientes de otros marcos. Un ejemplo para la solicitud de NextJS se verá así:
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.
} ) ;También es posible burlarse de las solicitudes del NextJS New Apprutator:
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)
Donde las opciones son un hash de objeto con cualquiera de los siguientes valores:
| opción | descripción | valor predeterminado |
|---|---|---|
method | Solicitar el método HTTP | 'CONSEGUIR' |
url | URL de solicitud | '' |
originalUrl | Solicite URL original | url |
baseUrl | URL de base de solicitud | url |
path | ruta de solicitud | '' |
params | objeto hash con parámetros | {} |
session | hash de objeto con valores de sesión | undefined |
cookies | hash de objeto con cookies de solicitud | {} |
socket | objeto hash con el socket de solicitud | {} |
signedCookies | objeto hash con cookies firmadas | undefined |
headers | hash de objeto con encabezados de solicitud | {} |
body | objeto hash con cuerpo | {} |
query | hash de objeto con valores de consulta | {} |
files | objeto hash con valores | {} |
El objeto devuelto de esta función también admite las funciones de solicitud expresa ( .accepts() , .is() , .get() , .range() , etc.). Envíe un PR para cualquier función faltante.
httpMocks . createResponse ( options ) ;Donde las opciones son un hash de objeto con cualquiera de los siguientes valores:
| opción | descripción | valor predeterminado |
|---|---|---|
locals | objeto que contiene variables locales response | {} |
eventEmitter | emisor de eventos utilizado por objeto response | mockEventEmitter |
writableStream | flujo de escritura utilizado por objeto response | mockWritableStream |
req | Solicitar objeto que se responde | nulo |
NOTA: El emisor de eventos simulados listos para el evento incluido con
node-mocks-httpno es un emisor de eventos funcionales y, como tal, en realidad no emite eventos. Si desea probar los manejadores de su evento, deberá traer su propio emisor de eventos.
Aquí hay un ejemplo:
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 ( ) ;
} ) ;
} ) ;
// ...Este es un ejemplo para enviar el cuerpo de solicitud y activar sus eventos de 'datos' y 'finalizar':
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 ) ; Fusiona createRequest y createResponse . Pasos Opciones dadas Objeto a cada constructor. Devuelve un objeto con Propiedades req y res .
Queríamos algunos simulacros simples sin un marco grande.
También queríamos que los simulacros actuaran como el marco original que se burlaba, pero permitía la configuración de valores antes de llamar e inspeccionar los valores después de llamar.
Estamos buscando más voluntarios para aportar valor a este proyecto, incluida la creación de más objetos del módulo HTTP.
Este proyecto no aborda todas las características que deben burlarse, pero es un buen comienzo. Siéntase libre de enviar solicitudes de extracción, y un miembro del equipo será oportuno para fusionarlas.
Si desea contribuir, lea nuestras pautas contribuyentes.
La mayoría de las versiones corrigen errores con nuestros simulacros o agregan características similares a los objetos reales Request y Response ofrecidos por Node.js y extendido por Express.
Vea el historial de lanzamiento para más detalles.
Licenciado bajo MIT.