Dar*_*don 104 karma-jasmine angular-cli angular
我有几个失败的测试只输出[object ErrorEvent] thrown.我在控制台中看不到任何可以帮助我查明违规代码的内容.我需要做些什么来追踪这些?
[编辑]:我正在运行Karma v1.70,Jasmine v2.7.0
Kun*_*vič 117
要解决此问题,您必须在没有源映射的情况下运行测试作为解决方法:
CLI v6.0.8及更高版本
--source-map=false
CLI v6.0.x早期版本
--sourceMap=false
CLI v1.x.
--sourcemaps=false
快捷方式
ng test -sm=false也可行
https://github.com/angular/angular-cli/issues/7296上有一个未解决的问题
更新:我也有这个问题,所以我只是迁移到最新的cli,并确保所有包都更新,package.json我也完全重新安装,node_modules所以现在问题已经消失.
Vic*_*hin 47
如果sourcemap = false没有帮助,请尝试1)打开运行测试的浏览器2)单击调试按钮3)打开控制台
错误将在那里
har*_*rci 22
尝试通过从终端运行测试来获得更具描述性的错误消息,如下所示:
ng test -sm=false
Run Code Online (Sandbox Code Playgroud)
在您的测试中,您可以替换
it('should...')
Run Code Online (Sandbox Code Playgroud)
同
fit('should...')
Run Code Online (Sandbox Code Playgroud)
现在只有fit之前的测试才会运行.要在运行测试后让浏览器保持打开状态,请运行以下测试:
ng test -sm=false --single-run false
Run Code Online (Sandbox Code Playgroud)
就个人而言,我遇到过两次这个错误.两者都只在调用fixture.detectChanges()时触发.
在第一时间,我在我的.html文件使用字符串插值更安全地解决了这个问题.
不安全的例子:
<p>{{user.firstName}}</p>
Run Code Online (Sandbox Code Playgroud)
安全(r)示例(注意问号):
<p>{{user?.firstName}}</p>
Run Code Online (Sandbox Code Playgroud)
同样适用于财产绑定:
<p [innerText]="user?.firstName"></p>
Run Code Online (Sandbox Code Playgroud)
在第二次的时候,我使用的是DatePipe在我的.html文件,但我用它在模拟财产不是一个日期.
.html文件:
<p>{{startDate | date: 'dd-MM-yyyy'}}</p>
Run Code Online (Sandbox Code Playgroud)
.ts(模拟数据)文件(错误):
let startDate = 'blablah';
Run Code Online (Sandbox Code Playgroud)
.ts(模拟数据)文件(正确):
let startDate = '2018-01-26';
Run Code Online (Sandbox Code Playgroud)
小智 16
这是因为jasmine框架无法处理ErrorEvent类型,因此它不会提取错误消息并调用error.toString()该对象.
我刚刚在jasmine repo上提交了一个问题 https://github.com/jasmine/jasmine/issues/1594
只要不修复,您就可以在node_modules文件夹中临时修补已安装的jasmine软件包.就我而言
node_modules/jasmine/node_modules/lib/jasmine-core/jasmine.js
然后从中更改ExceptionFormatter的实现
if (error.name && error.message) {
message += error.name + ': ' + error.message;
} else {
message += error.toString() + ' thrown';
}
Run Code Online (Sandbox Code Playgroud)
对此
if (error.name && error.message) {
message += error.name + ': ' + error.message;
} else if (error.message) {
message += error.message;
} else {
message += error.toString() + ' thrown';
}
Run Code Online (Sandbox Code Playgroud)
它有助于确定问题.
对我来说,这与在ngOnInit一个组件中解决了一个承诺有关.我不得不使用async,fakeAsync并勾选和删除异步服务spyOn
beforeEach(async(
//... initialise testbed and component
))
beforeEach(fakeAsync(
// ... setup mocks then call:
component.ngOnInit()
tick()
fixture.detectChanges()
))
Run Code Online (Sandbox Code Playgroud)
Angular - 如何使用异步服务调用对测试组件进行单元化
| 归档时间: |
|
| 查看次数: |
58001 次 |
| 最近记录: |