Saltar al contenido principal

Un valor a la vez

A veces no quiere un conjunto de datos. Quiere un apellido, aquí, en esta línea de una prueba: el trabajo que hace una librería tipo faker. TDC lo responde desde los mismos paquetes de datos que usan las configuraciones, así que el nombre de su prueba unitaria y el de su fixture de un millón de filas salen de la misma lista.

Las cinco implementaciones lo tienen, y con la misma semilla cada una devuelve el mismo valor:

import { tdc } from 'tdcv2';

tdc.person.lastName(); // Jones

Ese es todo el API. Lo que sigue es esa misma llamada con algo delante.

Cada valor de esta página se sorteó con la semilla demo, así que puede reproducirlo. Sin semilla cada llamada es nueva; la semilla aparece en Hacer que se repita.

Este es el cajón de valores sueltos

Cada llamada es independiente. Nada aquí ata un valor a otro: ni parent=, ni <switch> sobre una columna sorteada, ni uniq, ni <compute>. Un registro coherente es una configuración; vea Su primer conjunto de datos. Use esto cuando los valores de verdad no necesiten concordar entre sí.

Una regla: un punto es un punto

person.male.firstName en su código es person.male.firstName en una configuración y en la referencia. No hay un segundo vocabulario que aprender.

tdc.person.lastName(); // Jones
tdc.person.male.firstName(); // Robert
tdc.person.female.firstName(); // Linda
tdc.company.industry(); // Pharmaceuticals
tdc.color.name(); // Emerald
tdc.food.dish(); // Chicken Tikka Masala

Los segmentos se escriben como los escriben los paquetes, camelCase incluido, tanto en Python y C# como en TypeScript. No son nombres que la librería eligiera; renombrarlos por idioma sería un segundo vocabulario que mantener al día con la referencia, con una configuración y con las otras cuatro implementaciones.

Una dirección sin prefijo se lee contra la locale activa, igual que en una configuración. En en obtiene Jones; cambie la locale y la misma línea le da un apellido ruso.

Dos escrituras, una dirección

TypeScript, Python y C# recorren la dirección como miembros —tdc.person.lastName()— porque cada uno de esos lenguajes sabe responder por un miembro que no existe hasta que se lo piden. Java y Rust toman la dirección como cadena.

Es una decisión, no una carencia. La forma con miembros necesita un método generado por dirección, y una superficie generada solo puede cubrir los paquetes que van dentro del artefacto. La mayoría de los paquetes se descarga en tiempo de ejecución, así que un tdc.lang().ru() generado no existiría para un paquete instalado hace un minuto, mientras que get("ru.person.lastName") funciona en cuanto termina la descarga.

Nombrar un paquete directamente

Una dirección puede alcanzar más allá de la locale activa y nombrar un paquete. Java y Rust escriben esa dirección tal cual. TypeScript, Python y C# le anteponen common, country o lang: dentro de una dirección esas tres palabras no cargan significado, y existen para que la lista de autocompletado en tdc. siga siendo una lista de categorías y no un muro de 122 códigos de paquete.

AlcanzaTypeScript, Python, C#Java, Rust
la locale activatdc.person.lastName()"person.lastName"
el paquete compartido, igual en todos los idiomastdc.common.id.uuid()"common.id.uuid"
el paquete de un paístdc.country.usa.docs.ssn()"usa.docs.ssn"
el paquete de un idiomatdc.lang.ru.person.lastName()"ru.person.lastName"
tdc.common.id.uuid(); // 3ff6ff76-6ea7-4fad-8b99-3075a14cc7e9
tdc.common.internet.email(); // u99o89qpeo@test-qu8y3h.invalid
tdc.common.finance.iban(); // DE62299399441396459682
tdc.common.finance.currency(); // Swedish Krona

tdc.country.usa.docs.ssn(); // 699209702
tdc.country.usa.finance.aba_routing(); // 659939946

Esos dos identificadores no solo parecen reales: llevan dígitos de control de verdad, los mismos que produciría una configuración.

Una dirección no instalada lo dice

common, en y el paquete de EE. UU. vienen dentro de las cinco entregas. Todo lo demás está a una descarga, y pedirlo antes de tenerlo devuelve un fallo con nombre, no un vacío:

tdc.lang.ru.person.lastName();
// TdcQuickError: the "ru" pack is not installed, so "ru.person.lastName" cannot be
// drawn. Install it with `tdcv2 pack add ru` (run `tdcv2 init` once first, to say
// where packs go).

Solo cambia la redacción de Java, y solo porque Maven no deja nada en el PATH: aconsejar que ejecute tdcv2 sería un consejo que un lector de Java no puede teclear. La línea de comandos en sí es la misma en las cinco. Vea Instalar paquetes.

Un segmento mal escrito es otro fallo, y lo dice: person.lastNam vuelve como unknown address "person.lastNam" (locale "en"). Did you mean "en.person.lastName"?

Varios de una vez

Pida n valores en una sola llamada en lugar de llamar en un bucle: es un sorteo de n valores, no n sorteos de uno.

tdc.person.lastName.many(5);
// [ 'Jones', 'Bush', 'Armstrong', 'Andrews', 'Jimenez' ]

Hacer que se repita

Por defecto cada llamada es nueva, que es lo que quiere en un script de borrador. Fije una semilla y los valores pasan a ser parte de la prueba en vez de una variable dentro de ella. Fijar una semilla además devuelve un objeto nuevo en lugar de cambiar aquel sobre el que la llamó, así que dos pruebas pueden sostener semillas distintas a la vez.

const t = tdc.seed('demo');
t.person.lastName(); // Jones, hoy y el año que viene

const ru = tdc.seed('fixtures').locale('ru');
const en = tdc.seed('fixtures').locale('en');
ru.person.lastName(); // Ткаченко
en.person.lastName(); // Pearson

Generadores sin paquete

Los generadores propios del motor también están al alcance, para los valores que salen de una regla y no de una lista. Toman atributos en vez de una dirección, así que viven bajo un nombre propio: las categorías de los paquetes ya se llaman date, text y word, con lo que el nivel superior está ocupado.

tdc.gen.number('18..80'); // 66
tdc.gen.regex('[A-Z]{2}-[0-9]{4}'); // FZ-3994

Cada generador y sus atributos están en la referencia de generadores.

Los valores siempre son cadenas

Números y fechas incluidos. El mundo del motor es texto — eso es lo que permite que una configuración produzca CSV, SQL y JSON sin cambiar — y un tipo de retorno que variara con la dirección sería un contrato distinto en cada una de las cinco. Convierta en el sitio de la llamada cuando necesite un número:

const age = Number(tdc.gen.number('18..80'));

Cuándo usar una configuración

Recurra a una configuración en cuanto dos valores tengan que concordar: una ciudad que pertenece a su país, un total de pedido que cuadra con sus líneas, un 30% que tiene que ser exactamente 30%. De eso trata el resto de esta documentación, y empieza en Su primer conjunto de datos.

Vea también