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
yexpect
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?
fuente
Respuestas:
Espero que hayas instalado
Luego coloque la siguiente importación en la parte superior del
hero.spec.ts
archivo:Debería resolver el problema.
fuente
@types/[email protected]
. De lo contrario, puede ver estos errores de compilación .import 'jasmine';
import {} from 'jasmine';
realmente? ¿Es lo mismo queimport 'jasmine'
?Con [email protected] o posterior puede instalar tipos con:
Luego importe los tipos automáticamente usando la
types
opción entsconfig.json
:Esta solución no requiere
import {} from 'jasmine';
en cada archivo de especificaciones.fuente
"types": ["jasmine"]
línea. "Por defecto, todos los paquetes visibles" @types "están incluidos en su compilación. Los paquetes en node_modules / @ tipos de cualquier carpeta adjunta se consideran visibles; específicamente, eso significa paquetes dentro de ./node_modules/@types/, ../node_modules/@ tipos /, ../../node_modules/@types/, y así sucesivamente ".node
yjasmine
tipos no son detectados. Al menos no funciona para mí y estoy usando [email protected]ang-app/e2e/tsconfig.json
. Lo probé en todos los niveles json . ¿Podría agregar más detalles?Como se menciona en algunos comentarios
"types": ["jasmine"]
, ya no es necesario, todos los@types
paquetes 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:
Esto funciona para mi.
Más información en los documentos oficiales de tsconfig .
fuente
src/tsconfig.app.json
,src/tsconfig.spec.json
ytsconfig.json
. La mencionada sección "excluir" es parte de la primera."types": [ "jasmine" ]
parte de la 2da.exclude
bloque.exclude
bloque tsconfig . Luego creé un nuevotsconfig.build.json
archivo con el patrón de archivo de especificaciones agregado alexclude
bloque. Ahora, en mists-loader
opciones (en el webpack.config) que estoy usandotsconfig.build.json
. Con estas configuraciones, los módulos se resuelven en los archivos de prueba y al crear la compilación o iniciar el servidor, se excluyen los archivos de prueba.Necesita instalar tipings para jazmín. Suponiendo que se encuentra en una versión relativamente reciente del mecanografiado 2, debería poder hacer:
fuente
Con [email protected] o posterior puede instalar tipos con npm install
luego importar los tipos automáticamente utilizando el typeRoots opción en tsconfig.json.
Esta solución no requiere importación {} desde 'jazmín'; en cada archivo de especificaciones.
fuente
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:
al comienzo del
hero.spec.ts
archivo corrige el problema. La ruta conduce a latypings
carpeta (donde se almacenan todos los tipos).Para instalar tipings, debe crear un
typings.json
archivo en la raíz de su proyecto con el siguiente contenido:Y ejecutar
typings install
(dondetypings
está el paquete NPM).fuente
En mi caso, la solución fue eliminar el
typeRoots
en mitsconfig.json
.Como puedes leer en el documento de TypeScript
fuente
Estoy a la última hasta el día de hoy y encontré que la mejor manera de resolver esto es no hacer nada ... no
typeRoots
notypes
noexclude
no,include
todos los valores predeterminados parecen funcionar bien. En realidad, no funcionó bien para mí hasta que los eliminé a todos. Yo tenía:pero eso está en los valores predeterminados, así que eliminé eso.
Yo tenía:
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'.
desdenode_modules\@types\graphql\subscription\subscribe.d.ts
lo cual es muy desagradable, así que hice esto en tsconfig para que lo cargue:
ya que está en el conjunto esnext. No lo estoy usando directamente, así que todavía no me preocupa la compatibilidad. Espero que eso no me queme más tarde.
fuente
"types": ["node"]
entsconfig.json
pero se debe añadir en este tipotsconfig.app.json
! No debería volver a tener esta advertencia, creo. Podrías quedarte"target": "es5"
o"target": "es6"
ahora.Solo tenía que hacer lo siguiente para recoger @types en un Lerna Mono-repo donde existen varios node_modules.
Luego, en cada archivo tsconfig.file de cada módulo o aplicación
fuente
Para que el compilador TypeScript use todas las definiciones de tipo visibles durante la compilación, la
types
opción debe eliminarse completamente delcompilerOptions
campo en eltsconfig.json
archivo.Este problema surge cuando existen algunas
types
entradas en elcompilerOptions
campo, donde al mismo tiempojest
falta la entrada.Entonces, para solucionar el problema, el
compilerOptions
campo en sutscongfig.json
debe incluirjest
en eltypes
área o deshacerse portypes
completo:fuente
google map types
latypes
opción. Después de eliminar la opción por completo, funcionó bien.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:
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: Ya no es necesario para esto
import 'jasmine';
.fuente
En mi caso, recibí este error cuando sirvo 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:
Incluía todos mis
.spec.ts
archivos cuando servía la aplicación. Cambié lainclude property to
exclusión 'y agregué una expresión regular para excluir todos los archivos de prueba como este:Ahora funciona como se esperaba.
fuente
Mire la importación, tal vez tenga una dependencia del ciclo , este fue en mi caso el error, el uso
import {} from 'jasmine';
solucionará los errores en la consola y hará que el código sea compilable pero no elimine la raíz del diablo (en mi caso, la dependencia del ciclo).fuente
Estoy en Angular 6, Typecript 2.7, y estoy usando Jest Framework para la prueba unitaria. Había
@types/jest
instalado y añadido entypeRoots
el interiortsconfig.json
Pero aún tiene el error de visualización a continuación (es decir: en el terminal no hay errores)
Y agregando la importación:
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
en la
src/
carpeta, resolvió el problema para mí. Como @types se importa antes dentro de los 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)
fuente
si el error está en el archivo .specs app / app.component.spec.ts (7,3): error TS2304: No se puede encontrar el nombre 'beforeEach'.
agregue esto a la parte superior de su archivo y npm instale rxjs
importar {rango} desde 'rxjs'; importar {mapa, filtro} desde 'rxjs / operadores';
fuente