Servicio WireMock
wdio-wiremock-service es un paquete de terceros, para más información consulta GitHub | npm
Este servicio te ayuda a ejecutar WireMock sin problemas cuando ejecutas pruebas con WebdriverIO. Utiliza el conocido repositorio Maven para descargar el archivo jar de WireMock automáticamente, que luego se instala, inicia y detiene de forma automática. Mantente al día uniéndote a la comunidad en Gitter para obtener ayuda y soporte.
Instalación
npm i -D wdio-wiremock-service
Las instrucciones sobre cómo instalar WebdriverIO
se pueden encontrar aquí.
Uso
En el directorio raíz (por defecto ./mock
) encontrarás dos subdirectorios, __files
y mappings
que se utilizan para tus fixtures y mocks.
Para más información, consulta la documentación oficial de WireMock.
Configuración
Para usar el servicio con el testrunner de wdio necesitas añadirlo a tu array de servicios:
// wdio.conf.js
export.config = {
// ...
services: ['wiremock'],
// ...
};
Cuando uses webdriverio de forma independiente, necesitas añadir el servicio y activar los hooks onPrepare
y onComplete
manualmente. Puedes encontrar un ejemplo aquí (el ejemplo utiliza Jest):
Opciones
Las siguientes opciones se pueden añadir al servicio.
port
Puerto donde WireMock debería ejecutarse.
Tipo: Number
Valor predeterminado: 8080
Ejemplo:
// wdio.conf.js
export const config = {
// ...
services: [['wiremock', { port: 8181 }]],
// ...
};
rootDir
Ruta donde WireMock buscará archivos.
Tipo: String
Valor predeterminado: ./mock
Ejemplo:
// wdio.conf.js
export const config = {
// ...
services: [['wiremock', { rootDir: './mock' }]],
// ...
};
version
Versión de WireMock que se descargará y utilizará.
Tipo: String
Valor predeterminado: 3.3.1
Ejemplo:
// wdio.conf.js
export const config = {
// ...
services: [['wiremock', { version: '2.25.1' }]],
// ...
};
skipWiremockInstall
Indica al servicio que omita la descarga de WireMock.
Tipo: Boolean
Valor predeterminado: false
Ejemplo:
// wdio.conf.js
export const config = {
// ...
services: [['wiremock', { skipWiremockInstall: true }]],
// ...
};
binPath
Ruta personalizada a un binario local de Wiremock (a menudo usado en combinación con skipWiremockInstall).
Tipo: String
Valor predeterminado: './wiremock-standalone-3.0.0.jar' (relativo al servicio)
Ejemplo:
// wdio.conf.js
export const config = {
// ...
services: [['wiremock', { binPath: './my-custom/example-path/wiremock-standalone-3.0.0.jar' }]],
// ...
};
silent
Modo silencioso para el registro de la salida de WireMock (incluido el registro adicional del propio servicio).
Tipo: Boolean
Valor predeterminado: false
Ejemplo:
// wdio.conf.js
export const config = {
// ...
services: [['wiremock', { silent: true }]],
// ...
};
mavenBaseUrl
URL base de descarga para Maven.
Tipo: String
Valor predeterminado: https://repo1.maven.org/maven2
Ejemplo:
// wdio.conf.js
export const config = {
// ...
services: [['wiremock', { mavenBaseUrl: 'https://repo1.maven.org/maven2' }]],
// ...
};
args
Lista donde puedes pasar todos los argumentos soportados para configurar WireMock
Nota: no puedes pasar las opciones (port
, rootDir
, stdio
, mavenBaseUrl
) aquí ya que serán ignoradas.
Tipo: Array
Ejemplo:
// wdio.conf.js
export const config = {
// ...
services: [
[
'wiremock',
{
args: ['--verbose', '--match-headers'],
},
],
],
// ...
};
Escribiendo pruebas
Escribir tu primera prueba es realmente sencillo:
Usando el testrunner de WDIO
import fetch from 'node-fetch'; // puedes usar cualquier cliente HTTP que prefieras
import { equal } from 'node:assert'; // puedes usar cualquier biblioteca de aserciones que prefieras
describe('example', () => {
it(`should assert the mock data`, async () => {
const body = await fetch('http://localhost:8080/api/mytest');
equal(body.text(), 'Hello world!');
});
});
Usando WebdriverIO Standalone
import fetch from 'node-fetch'; // puedes usar cualquier cliente HTTP que prefieras
import { equal } from 'node:assert'; // puedes usar cualquier biblioteca de aserciones que prefieras
import { remote } from 'webdriverio';
import { launcher } from 'wdio-wiremock-service';
const WDIO_OPTIONS = {
capabilities: {
browserName: 'chrome',
},
};
describe('example', () => {
let wiremockLauncher;
let client;
beforeAll(async () => {
wiremockLauncher = new launcher(); // crear instancia del servicio
await wiremockLauncher.onPrepare(WDIO_OPTIONS); // ejecutar el hook onPrepare
client = await remote(WDIO_OPTIONS);
});
afterAll(async () => {
await client.deleteSession();
await wiremockLauncher.onComplete(); // ejecutar el hook onComplete
});
test('should showoff a mocked api response', async () => {
const body = await fetch('http://localhost:8080/api/mytest');
equal(body.text(), 'Hello world!');
});
});
Para más información sobre WebdriverIO, visita la página principal.