demo4
y demo5
se puede intentar atravesar npm run take a look at:demo4–5
. De esta forma se realiza una solicitud de datos reales. Aquí, axios
El proxy se utilizará para reenviar solicitudes de datos internos al puerto del servidor especificado. Por lo tanto, el servidor también se inicia localmente y la prueba se realiza especificando los datos de solicitud y respuesta relacionados con el correspondiente path
. Si los datos solicitados son incorrectos, los datos de respuesta relacionados no coincidirán normalmente. Por lo tanto, la solicitud regresará directamente 500
. Si los datos de respuesta devueltos son incorrectos, también se capturarán durante la afirmación. En el jest-mock-server
biblioteca, primero, debemos especificar tres archivos que corresponden a los tres ciclos de vida que cada archivo de prueba unitaria se ejecutará antes del inicio. Jest
La prueba se ejecuta antes de los tres ciclos de vida y los tres ciclos de vida se ejecutan después de los Jest
se completa la prueba. Los tres archivos que debemos especificar son los setupFiles
, globalSetup
y globalTeardown
elementos de configuración del jest.config.js
archivo de configuración.
Primero vamos a empezar con setupFiles
. Además de inicializar JSDOM
también necesitamos operar el proxy predeterminado de axios
. Debido a que la solución adoptada es utilizar el proxy
de axios
para remitir solicitudes de datos. Por lo tanto, es necesario establecer el valor proxy al frente de la prueba unitaria.
Una vez que configuramos el archivo anterior dentro deltake a look at/config
carpeta, entonces necesitamos agregar dos archivos más allí que son globalSetup
y globalTeardown
. Estos dos archivos se refieren a las operaciones realizadas antes de la Jest
La prueba unitaria comienza y después de que se completan todas las pruebas. Colocamos las operaciones de inicio y apagado del servidor en esos dos archivos.
Tenga en cuenta que el archivo que se ejecuta en estos dos archivos es independiente
contex
que no tiene nada que ver con elcontex
de cualquier prueba unitaria, incluido el archivo especificado por el elemento de configuración setupFiles. Por lo tanto, todos los datos aquí se especifican en el archivo de configuración o se transmiten entre los puertos del servidor a través de la purple.
Para la información del puerto de configuración y del nombre de dominio, colóquelo directamente en el globals
campo en jest.config.js
. Para el debug
elemento de configuración, se recomienda usarlo junto con take a look at.solely
.
Ahora, puede haber una sugerencia de por qué el servidor no debería iniciarse y apagarse en el beforeAll
y afterAll
ciclos de vida de cada archivo de prueba unitaria. Por eso, he probado esta solución. En esta solución, para cada archivo de prueba, el servidor se inicia y luego se apaga. Por lo tanto, esta solución requiere relativamente tiempo. Pero en teoría esta solución es razonable. Después de todo, es cierto que el aislamiento de los datos es necesario. Pero hay un problema cuando afterAll
está cerrado. En realidad, no cierra el servidor y la ocupación del puerto porque el shut
El método se llama cuando el node
El servidor está cerrado. CuandoafterAll
está cerrado. Simplemente dejó de procesar la solicitud pero el puerto aún está ocupado. Cuando se inicia el archivo de prueba de la segunda unidad, se generará una excepción indicando que se está utilizando el puerto. Aunque probé algunas soluciones, no son las ideales porque a veces el puerto todavía está ocupado. Especialmente cuando el node
se ejecuta por primera vez después de encenderlo, la probabilidad de anomalías es relativamente alta. Por tanto, el efecto no es muy satisfactorio. Al last, se adopta el esquema de aislamiento completo. Para problemas relacionados específicos, consulte este enlace.
Dado que adoptamos una solución completamente aislada, solo hay dos opciones cuando queremos transmitir los datos de solicitud y respuesta para la solicitud de prueba. Las dos soluciones son: cuando se inicia el servidor, todos los datos se especifican en el take a look at/config/global-setup.js
El archivo o los datos se transmiten a través de la purple cuando el servidor se está ejecutando, se especifica la ruta y la solicitud de purple de la ruta transportará datos y la solicitud de datos se especificará en el cierre del servidor. Por lo tanto, aquí se admiten ambas opciones. Creo que es más apropiado especificar sus propios datos en cada archivo de prueba unitaria, por lo que aquí hay solo un ejemplo de cómo especificar los datos que se probarán en el archivo de prueba unitaria. En cuanto a los datos a probar, un DataMapper
El tipo se especifica para reducir las excepciones causadas por errores de tipo. Por lo tanto, aquí se ejemplifican dos conjuntos de datos. Además, se admiten expresiones regulares al hacer coincidir question
y knowledge
. La estructura de la DataMapper
El tipo es relativamente estándar.
En las dos pruebas unitarias siguientes, los datos que se van a probar se especifican en beforeAll
. Tenga en cuenta que beforeAll
es devolver setSuitesData(knowledge) porque la prueba unitaria se ejecuta después de que se establecen los datos y la respuesta es exitosa, seguida de la solicitud regular y la respuesta si la prueba de afirmación es correcta.