Estou seguindo este tutorial do angular.io
Como eles disseram, eu criei o arquivo hero.spec.ts para criar testes de unidade:
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);
});
});
Os testes de unidade funcionam como um encanto. O problema é: Eu vejo alguns erros, mencionados no tutorial:
Nosso editor e o compilador podem reclamar que não sabem o que são
it
eexpect
porque não possuem os arquivos de digitação que descrevem o Jasmine. Por enquanto, podemos ignorar essas reclamações irritantes, pois são inofensivas.
E eles realmente ignoraram. Mesmo que esses erros sejam inofensivos, ele não fica bem no meu console de saída quando eu recebo vários deles.
Exemplo do que recebo:
Não foi possível encontrar o nome 'descrever'.
Não foi possível encontrar o nome 'it'.
Não foi possível encontrar o nome 'expect'.
O que posso fazer para corrigi-lo?
fonte
Respostas:
Espero que você tenha instalado -
Em seguida, coloque a seguinte importação na parte superior do
hero.spec.ts
arquivo -Deve resolver o problema.
fonte
@types/[email protected]
. Caso contrário, você poderá ver esses erros de compilação .import 'jasmine';
import {} from 'jasmine';
realmente faz? É o mesmo queimport 'jasmine'
?Com [email protected] ou posterior, você pode instalar tipos com:
Importe os tipos automaticamente usando a
types
opção emtsconfig.json
:Esta solução não requer
import {} from 'jasmine';
em cada arquivo de especificação.fonte
"types": ["jasmine"]
linha. "Por padrão, todos os pacotes" @types "visíveis estão incluídos na sua compilação. Os pacotes nos tipos node_modules / @ de qualquer pasta anexa são considerados visíveis; especificamente, isso significa pacotes dentro de ./node_modules/@types/, ../node_modules/@ tipos /, ../../node_modules/@types/ e assim por diante. "node
ejasmine
tipos não são detectados. Pelo menos não funciona para mim e estou usando [email protected]ang-app/e2e/tsconfig.json
. Eu tentei-o em todos os níveis json Poderia acrescentar mais detalhes.?Como mencionado em alguns comentários,
"types": ["jasmine"]
não é mais necessário, todos os@types
pacotes são incluídos automaticamente na compilação (desde a v2.1, eu acho).Na minha opinião, a solução mais fácil é excluir os arquivos de teste no seu tsconfig.json como:
Isso funciona para mim.
Mais informações nos documentos oficiais do tsconfig .
fonte
src/tsconfig.app.json
,src/tsconfig.spec.json
etsconfig.json
. A seção "excluir" mencionada faz parte da 1ª."types": [ "jasmine" ]
parte do 2º.exclude
bloco.exclude
bloco do tsconfig . Então eu criei um novotsconfig.build.json
arquivo com o padrão de arquivo de especificação adicionado aoexclude
bloco. Agora, nas minhasts-loader
opções (no webpack.config) eu estou usandotsconfig.build.json
. Com essas configurações, os módulos estão sendo resolvidos nos arquivos de teste e, ao criar a construção ou iniciar o servidor, os arquivos de teste são excluídos.Você precisa instalar as tipagens para o jasmim. Supondo que você esteja em uma versão relativamente recente do texto datilografado 2, você poderá:
fonte
Com [email protected] ou posterior, você pode instalar tipos com o npm install
em seguida, importar os tipos automaticamente usando o typeRoots opção no tsconfig.json.
Esta solução não requer importação {} de 'jasmine'; em cada arquivo de especificação.
fonte
A solução para esse problema está relacionada ao que o @Pace escreveu em sua resposta. No entanto, não explica tudo, então, se você não se importa, eu escreverei sozinho.
SOLUÇÃO:
Adicionando esta linha:
no início do
hero.spec.ts
arquivo corrige o problema. O caminho leva àtypings
pasta (onde todas as digitações são armazenadas).Para instalar digitações, você precisa criar um
typings.json
arquivo na raiz do seu projeto com o seguinte conteúdo:E execute
typings install
(ondetypings
está o pacote NPM).fonte
No meu caso, a solução foi remover o
typeRoots
no meutsconfig.json
.Como você pode ler no documento TypeScript
fonte
Estou atualizado até hoje e encontrei a melhor maneira de resolver isso é não fazer nada ... não
typeRoots
nãotypes
nãoexclude
não,include
todos os padrões parecem estar funcionando bem. Na verdade, não funcionou direito para mim até removê-los todos. Eu tinha:mas isso está nos padrões, então eu removi isso.
Eu tinha:
para passar por algum aviso do compilador. Mas agora eu também removi isso.
O aviso que não deveria ser é:
error TS2304: Cannot find name 'AsyncIterable'.
denode_modules\@types\graphql\subscription\subscribe.d.ts
o que é muito desagradável, então eu fiz isso no tsconfig para carregá-lo:
já que está no conjunto esnext. Eu não estou usando diretamente, então não se preocupe aqui com compatibilidade ainda. Espero que não me queime mais tarde.
fonte
"types": ["node"]
,tsconfig.json
mas deve adicionar esse tipotsconfig.app.json
! Você não deveria ter esse aviso novamente, eu acho. Você poderia ficar"target": "es5"
ou"target": "es6"
agora.Só foi necessário fazer o seguinte para selecionar @types em um Lerna Mono-repo, onde existem vários node_modules.
Em seguida, em cada tsconfig.file de cada módulo ou aplicativo
fonte
Para que o TypeScript Compiler use todas as Definições de tipo visíveis durante a compilação, a
types
opção deve ser removida completamente docompilerOptions
campo notsconfig.json
arquivo.Esse problema surge quando existem algumas
types
entradas nocompilerOptions
campo, onde ao mesmo tempojest
está faltando.Portanto, para corrigir o problema, o
compilerOptions
campo notscongfig.json
deve incluirjest
natypes
área ou livrar-setypes
completamente:fonte
google map types
atypes
opção. Depois de remover a opção completamente, funcionou bem.Vou apenas adicionar a resposta para o que funciona para mim em "typescript": "3.2.4" Eu percebi que o jasmim em node_modules / @ types existe uma pasta para ts3.1 sob o tipo de jasmim, então aqui estão as etapas: -
npm install -D @types/jasmine
Adicione ao tsconfig.json jasmine / ts3.1
"typeRoots": [ ... "./node_modules/jasmine/ts3.1" ],
Adicione Jasmine aos tipos
"types": [ "jasmine", "node" ],
Nota: Não há
import 'jasmine';
maisnecessidade disso.fonte
No meu caso, eu estava recebendo esse erro ao servir o aplicativo, não ao testar. Não sabia que tinha uma configuração diferente no meu arquivo tsconfig.app.json.
Eu já tinha isso:
Estava incluindo todos os meus
.spec.ts
arquivos ao veicular o aplicativo.include property to
Alterei o excluir` e adicionei um regex para excluir todos os arquivos de teste como este:Agora funciona como esperado.
fonte
Olhe para a importação, talvez você tenha uma dependência de ciclo , este foi o meu erro. Usar
import {} from 'jasmine';
corrigirá os erros no console e tornará o código compilável, mas não removerá a raiz do diabo (no meu caso, a dependência do ciclo).fonte
Estou no Angular 6, TypeScript 2.7, e estou usando o framework Jest para teste de unidade. Eu tinha
@types/jest
instalado e adicionado portypeRoots
dentrotsconfig.json
Mas ainda tem o erro de exibição abaixo (ou seja: no terminal não há erros)
E adicionando a importação:
tecnicamente não faz nada, então eu pensei, que há uma importação em algum lugar causando esse problema, então eu descobri que, se excluir o arquivo
na
src/
pasta, resolveu o problema para mim. Como @types é importado antes dentro dos rootTypes.Eu recomendo que você faça o mesmo e exclua este arquivo, nenhuma configuração necessária está dentro. (ps: se você estiver no mesmo caso que eu)
fonte
se o erro estiver no arquivo .specs app / app.component.spec.ts (7,3): erro TS2304: Não foi possível encontrar o nome 'beforeEach'.
adicione isso ao topo do seu arquivo e o npm install rxjs
importar {range} de 'rxjs'; import {map, filter} de 'rxjs / operadores';
fonte