Estou tentando testar meu componente angular 4.1.0 -
export class CellComponent implements OnInit {
lines: Observable<Array<ILine>>;
@Input() dep: string;
@Input() embedded: boolean;
@Input() dashboard: boolean;
constructor(
public dataService: CellService,
private route: ActivatedRoute,
private router: Router, private store: Store<AppStore>) {
}
}
No entanto, um teste simples "deve criar" gera esse erro enigmático ...
NetworkError: falha ao executar 'send' em 'XMLHttpRequest': falha ao carregar 'ng: ///DynamicTestModule/module.ngfactory.js'.
então encontrei esta pergunta, que sugere que o problema é que o componente possui @Input)_
parâmetros que não estão definidos, no entanto, se eu modificar meu teste da seguinte forma:
it('should create', inject([CellComponent], (cmp: CellComponent) => {
cmp.dep = '';
cmp.embedded = false;
cmp.dashboard = false;
expect(cmp).toBeTruthy();
}));
ainda continuo com o mesmo problema; da mesma forma, se remover as @Input()
anotações do componente, ainda não há diferença. Como posso passar esses testes?
angular
unit-testing
karma-jasmine
angular-cli
George Edwards
fonte
fonte
Respostas:
Este é um problema do novo Angular Cli. Execute seu teste
--sourcemaps=false
e você receberá as mensagens de erro corretas.Veja detalhes aqui: https://github.com/angular/angular-cli/issues/7296
EDITAR:
A abreviação para isso é:
ng test -sm=false
A partir do angular 6, o comando é:
ng test --source-map=false
fonte
Eu tive o mesmo problema usando o angualar cli 6, usei essa tag para obter a mensagem de erro correta:
Talvez ajude alguém :).
fonte
Para o meu caso, havia um problema de dados simulados e, no caso de
Array
, eu estava retornandostring
da simulação.Muitas vezes isso acontece quando você zomba de dados incompletos ou incorretos.
fonte
Você pode definir a propriedade input () como o valor padrão em component.ts
OU
Modifique seu arquivo component.spec.ts da seguinte maneira,
fonte
Como sugerido acima aqui: https://stackoverflow.com/a/45570571/7085047 meu problema estava no meu
ngOnInit
. Eu estava chamando um proxy de controlador REST simulado gerado por arrogância. Ele estava retornando nulo, e eu estava assinando esse nulo, o que não funciona ...O erro voltou:
Failed to load ng:///DynamicTestModule/MockNodeDashboardComponent_Host.ngfactory.js: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.
Corrigi o problema usando o ts-mockito: https://github.com/NagRock/ts-mockito
Eu adicionei código para criar uma instância simulada como esta:
E, em seguida, adicionou a instância à matriz de provedores do teste como esta:
fonte
Isso pode estar relacionado ao fato de o Chrome ocultar um erro de teste real. A área de teste estará confundindo alguma fábrica http falsa que não pode ser carregada e, portanto, esse é o erro que será relatado. Provavelmente, o erro ocorrerá na área ngOnInit onde um objeto está, digamos, esperando subobjetos e eles não estão definidos.
Para tentar chegar ao fundo do erro, mude para o PhantomJS temporariamente, o que parece sofrer menos com esses erros de inicialização e, com sorte, isso reportará o erro real a você. Várias ocasiões em que achei que um objeto esperado na inicialização não estava completo. IE:
A correção do objeto permitiu ao PhantomJS concluir e também o Chrome passou para o próximo teste.
Fora isso, não vi uma solução para remover o problema do Chrome. Como sempre, tente adotar uma política "remova o código até que ocorra o erro" para perseguir o erro.
ATUALIZAÇÃO: Observe que agora é uma resposta bastante antiga, eu não recomendaria mais o PhantomJS (EOL). Os relatórios de teste do navegador ficaram muito melhores e, se o Chrome estiver sofrendo, tente o Firefox, que também executa testes muito bons atualmente.
fonte
Eu também tive esse erro, cuja verdade seja dita não é faladora.
Estava relacionado às chamadas HTTP através dos meus serviços
Eu uso myService.ts com 2 métodos
Estou zombando deste serviço: mockMyService.ts
O erro estava aqui porque meu componente estava usando o método getAll () que eu esqueci de implementar no mockMyService, então acabei de adicionar o método:
O erro se foi :)
fonte
Eu enfrentei o mesmo problema e descobri que, para corrigi-lo, você deve definir suas entradas para o componente no método beforeEach, como mostrado abaixo:
Isso definitivamente resolverá seu problema.
fonte
No meu caso, o culpado foi
observable.timeout(x).retry(y)
aplicado em algum lugar no Observable retornado no nível da classe de serviço e, novamente, no componente que estava usando esse serviço.Tudo funcionou corretamente no navegador até o angular-cli 1.4. Então começou a falhar durante os testes de Karma (com um erro tão bobo). Obviamente, a solução era arrumar esses operadores de tempo limite / nova tentativa.
fonte
Para mim, essa mensagem aparece quando um mock é falso nos meus testes: geralmente você fornece mockService no bootstrap de seus testes. Se o seu mock for incompleto ou falso, o angular retornará esse erro estúpido.
Mais informações sobre o meu caso aqui
fonte
O que eu estaria fazendo é:
Adicione console.log () s, linha após linha no ngOnint () e descubra até onde vai, depois inspecione a linha pela qual não passará.
Ex:
Isso estava falhando no meu teste com o mesmo erro neste post. Como mostrado acima, eu tinha dois console.logs. O primeiro passou completamente, mas o segundo não. Então percebi que o problema está na linha const id = params.get ('id'); e eu consertei.
Espero que isso ajude alguém.
fonte