DocsConstruir y probar
Pruebas
nx test ejecuta las pruebas del servidor con pytest, y el cliente prueba con vitest cuando las solicitas.
nx test # pytestnx test -k create_user # extra arguments go to pytestnx test --client # pytest, then vitestnx test --no-server --client # vitest only
que corre
| Parte | Comando | Condición |
|---|---|---|
| El servidor | pytest |
se ejecuta en tests/ cuando existe; de lo contrario, en la raíz del proyecto; omitido con una advertencia cuando pytest no está instalado |
| Cliente | npx vitest run |
solo con --client, y solo cuando vitest.config.ts existe o vitest aparece en package.json |
No hay un corredor integrado de un extremo a otro. Maneja el servidor con TestClient y agrega Playwright o Cypress tú mismo para el comportamiento del navegador.
Probar el servidor
El cliente de prueba se comunica con la aplicación ASGI en proceso: no hay servidor para iniciar, no hay puerto para elegir.
from fastapi.testclient import TestClient from nexy.app import app def test_home_renders(): client = TestClient(app) response = client.get("/") assert response.status_code == 200nexy.app.app es la aplicación ensamblada, creada la primera vez que se lee. Lee nexyconfig.py del directorio de trabajo, así que ejecuta pytest desde la raíz del proyecto.
Cuando una prueba cambia la configuración o las rutas, cree una aplicación nueva en lugar de reutilizar la de nivel de módulo:
from fastapi.testclient import TestClientfrom nexy.modules.routers.app import AppServer def test_api_hello(): with TestClient(AppServer().run()) as client: response = client.get("/api/hello") assert response.json() == {"message": "Hello"}
AppServer().run() vuelve a ensamblar rutas, middleware, sesiones y traducciones, por lo que cada llamada comienza desde el estado actual del directorio del proyecto.
que afirmar
Una página devuelve HTML. Afirme el estado y luego el contenido que le interesa:
def test_blog_page_renders_slug(client): response = client.get("/blog/post-1") assert "post-1" in response.text
Un controlador API devuelve JSON. Un error de validación es un 422, y una ruta faltante es un 404 respondido por notfound.nexy cuando ese archivo existe:
def test_create_item_validates_body(client): assert client.post("/api/items", json={}).status_code == 422
Para una acción, pruebe la función directamente (es una función normal) y pruebe el punto final HTTP leyendo su ruta generada en la página que lo expone:
from src.actions.user import create_user async def test_create_user_returns_name(): assert await create_user("Ada") == {"name": "Ada"}
def test_form_posts_to_action(client): html = client.get("/").text action = html.split('action="')[1].split('"')[0] response = client.post(action, data={"name": "Ada"}, follow_redirects=False) assert response.status_code == 303
Una llamada con JSON responde con el resultado, y 422 con los campos no válidos.
Probar un componente .nexy
nexy.testing.render compila un componente, con los componentes que importa y devuelve su HTML. Los accesorios son argumentos de palabras clave y children= llena el espacio:
from nexy.testing import render def test_button_shows_its_label(): assert "Save" in render("src/components/button.nexy", label="Save")Ejecute pytest desde la raíz del proyecto: los archivos compilados van a __nexy__/, como ocurre con nx dev. Un componente que lee la solicitud (usePathname, useSession) necesita una prueba de página con TestClient en su lugar.
Probar al cliente
nx test --client espera su propia configuración de vitest. Una prueba de componentes mínimos:
import { render } from "@testing-library/react";import { describe, expect, it } from "vitest"; import Counter from "./counter"; describe("Counter", () => { it("starts at zero", () => { const { getByText } = render(<Counter start={0} />); expect(getByText("0")).toBeTruthy(); });});vitest y la biblioteca de pruebas son dependencias del proyecto: nexy new no instala una pila de pruebas. Agregue vitest.config.ts con el entorno que necesita (jsdom o happy-dom para componentes).
Integración continua
Dos comandos son suficientes para la canalización de un proyecto:
nx buildnx test
nx build falla por un error de compilación; nx test falla en una aserción fallida y sale de un valor distinto de cero. nx check agrega mypy y tsc a la ejecución.
Trabajar en Nexy utiliza diferentes comandos: consulte CONTRIBUCIÓN.
Próximos pasos
- CLI: cada bandera de
nx test - API: qué devuelve un punto final
- Implementar: compila antes de probar en CI