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 loit
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 .