unitarios unitarias unit tipos test pruebas unit-testing angular typescript jasmine

unit-testing - test - tipos de pruebas unitarias



Pruebas de unidad angular 2: no se puede encontrar el nombre ''describir'' (14)

Estoy siguiendo este tutorial de angular.io

Como dijeron, he creado el archivo hero.spec.ts para crear pruebas unitarias:

import { Hero } from ''./hero''; describe(''Hero'', () => { it(''has name'', () => { let hero: Hero = {id: 1, name: ''Super Cat''}; expect(hero.name).toEqual(''Super Cat''); }); it(''has id'', () => { let hero: Hero = {id: 1, name: ''Super Cat''}; expect(hero.id).toEqual(1); }); });

Las pruebas unitarias funcionan como un encanto. El problema es: veo algunos errores, que se mencionan en el tutorial:

Nuestro editor y el compilador pueden quejarse de que no saben qué it y lo it expect son porque carecen de los archivos de mecanografía que describen a Jasmine. Podemos ignorar esas molestas quejas por ahora, ya que son inofensivas.

Y de hecho lo ignoraron. Aunque esos errores son inofensivos, no se ve bien en mi consola de salida cuando recibo muchos de ellos.

Ejemplo de lo que obtengo:

No se puede encontrar el nombre ''describir''.

No se puede encontrar el nombre ''it''.

No se puede encontrar el nombre ''esperar''.

¿Que puedo hacer para arreglarlo?


Con [email protected] o posterior puede instalar tipos con npm install

npm install --save-dev @types/jasmine

luego importe los tipos automáticamente usando la opción typeRoots en tsconfig.json.

"typeRoots": [ "node_modules/@types" ],

Esta solución no requiere importación {} desde ''jazmín''; en cada archivo de especificaciones.


Con [email protected] o posterior puede instalar tipos con:

npm install -D @types/jasmine

Luego importe los tipos automáticamente usando la opción de types en tsconfig.json :

"types": ["jasmine"],

Esta solución no requiere import {} from ''jasmine''; en cada archivo de especificaciones.


En mi caso, la solución fue eliminar el typeRoots en mi tsconfig.json .

Como puedes leer en el documento de TypeScript

Si se especifica typeRoots, solo se incluirán los paquetes de typeRoots.


En mi caso, recibí este error cuando publico la aplicación, no cuando la pruebo. No me di cuenta de que tenía una configuración diferente en mi archivo tsconfig.app.json.

Anteriormente tuve esto:

{ ... "include": [ "src/**/*.ts" ] }

.spec.ts todos mis archivos .spec.ts cuando servía la aplicación. Cambié la include property to inclusión include property to excluir` y agregué una expresión regular para excluir todos los archivos de prueba como este:

{ ... "exclude": [ "**/*.spec.ts", "**/__mocks__" ] }

Ahora funciona como se esperaba.


Espero que hayas instalado

npm install --save-dev @types/jasmine

Luego coloque la siguiente importación en la parte superior del archivo hero.spec.ts :

import ''jasmine'';

Debería resolver el problema.


Estoy actualizado hasta el día de hoy y encontré que la mejor manera de resolver esto es no hacer nada ... sin tipo typeRoots sin types sin exclude sin include todos los valores predeterminados parecen estar funcionando bien. En realidad no funcionó bien para mí hasta que los eliminé a todos. Yo tenía:

"exclude": [ "node_modules" ]

pero eso está en los valores predeterminados, así que eliminé eso.

Yo tenía:

"types": [ "node" ]

para pasar alguna advertencia del compilador. Pero ahora también lo eliminé.

La advertencia que no debería ser es: error TS2304: Cannot find name ''AsyncIterable''. desde node_modules/@types/graphql/subscription/subscribe.d.ts

lo cual es muy desagradable, así que hice esto en tsconfig para que lo cargue:

"compilerOptions": { "target": "esnext", }

ya que está en el conjunto esnext. No lo estoy usando directamente, así que todavía no me preocupa la compatibilidad. Espero que no me queme más tarde.


Estoy en Angular 6, Typecript 2.7, y estoy usando Jest Framework para la prueba unitaria. Tenía @types/jest instalado y agregado en typeRoots dentro de tsconfig.json

Pero aún tiene el error de visualización a continuación (es decir: en el terminal no hay errores)

no puedo encontrar el nombre describir

Y agregando la importación:

import {} from ''jest''; // in my case or jasmine if you''re using jasmine

técnicamente no hace nada, así que pensé que hay una importación en algún lugar que causa este problema, entonces descubrí que si eliminaba el archivo

tsconfig.spec.json

en la carpeta src/ , resolvió el problema por mí. Como @types se importa antes dentro de rootTypes.

Le recomiendo que haga lo mismo y elimine este archivo, no hay configuración necesaria dentro. (ps: si estás en el mismo caso que yo)


La solución a este problema está relacionada con lo que @Pace ha escrito en su respuesta. Sin embargo, no explica todo, así que, si no te importa, lo escribiré yo mismo.

SOLUCIÓN:

Agregando esta línea:

///<reference path="./../../../typings/globals/jasmine/index.d.ts"/>

al principio del archivo hero.spec.ts corrige el problema. La ruta conduce a la carpeta de typings (donde se almacenan todos los tipings).

Para instalar typings, debe crear el archivo typings.json en la raíz de su proyecto con el siguiente contenido:

{ "globalDependencies": { "core-js": "registry:dt/core-js#0.0.0+20160602141332", "jasmine": "registry:dt/jasmine#2.2.0+20160621224255", "node": "registry:dt/node#6.0.0+20160807145350" } }

Y ejecute typings install (donde typings es el paquete NPM).


Mire la importación, tal vez tenga una dependencia de ciclo , este fue en mi caso el error, usando import {} from ''jasmine''; corregirá los errores en la consola y hará que el código sea compilable, pero no eliminará la raíz del diablo (en mi caso, la dependencia del ciclo).


Necesita instalar tipings para jazmín. Suponiendo que se encuentre en una versión relativamente reciente del mecanografiado 2, debería poder hacer:

npm install --save-dev @types/jasmine


Para que el compilador TypeScript use todas las definiciones de tipo visibles durante la compilación, la opción de types debe eliminarse completamente del campo compilerOptions en el archivo tsconfig.json .

Este problema surge cuando existen algunas entradas de types en el campo compilerOptions , donde al mismo tiempo falta la entrada jest .

Entonces, para solucionar el problema, el campo compilerOptions en su tscongfig.json debe incluir jest en el área de types o deshacerse de los types completo:

{ "compilerOptions": { "esModuleInterop": true, "target": "es6", "module": "commonjs", "outDir": "dist", "types": ["reflect-metadata", "jest"], //<-- add jest or remove completely "moduleResolution": "node", "sourceMap": true }, "include": [ "src/**/*.ts" ], "exclude": [ "node_modules" ] }


Solo agregaré Respuesta para lo que funciona para mí en "mecanografiado": "3.2.4" Me di cuenta de que jazmín en node_modules / @ types hay una carpeta para ts3.1 debajo del tipo de jazmín, así que aquí están los pasos:

  • Instalar tipo jasmine npm install -D @types/jasmine
  • Añadir a tsconfig.json jasmine / ts3.1

    "typeRoots": [ ... "./node_modules/jasmine/ts3.1" ],

  • Agregar jazmín a los tipos

    "types": [ "jasmine", "node" ],

Nota: No se necesita esta import ''jasmine''; nunca más.


Solo tenía que hacer lo siguiente para recoger @types en un Lerna Mono-repo donde existen varios node_modules.

npm install -D @types/jasmine

Luego, en cada archivo tsconfig.file de cada módulo o aplicación

"typeRoots": [ "node_modules/@types", "../../node_modules/@types" <-- I added this line ],


npm install @types/jasmine

Como se menciona en algunos comentarios, los "types": ["jasmine"] ya no son necesarios, todos los paquetes @types se incluyen automáticamente en la compilación (desde la versión 2.1, creo).

En mi opinión, la solución más fácil es excluir los archivos de prueba en su tsconfig.json como:

"exclude": [ "node_modules", "**/*.spec.ts" ]

Esto funciona para mi.

Más información en los documentos oficiales de tsconfig .