开发者问题收集

Angular2-单选按钮测试

2017-04-10
3760

我尝试在 Angular 2 中使用 Karma-Jasmine 测试 HTML 单选按钮。 我的 HTML 代码如下

<label class="color-dark display-block" *ngFor="let userGroup of userGroups">
    <input type="radio" id="stateRadio" name="statusRadio(click)="selectedGroup(seGrp = statusLabel.value)" [checked]="statusLabel.value === selectionStatus">{{statusLabel.value}}
</label>

规范

it('should have defined number of userGroup radio buttons', () => {
    el = fixture.debugElement.query(By.css('#stateRadio')).nativeElement
    expect(el.click()).toBeTruthy();
});

我收到错误 - TypeError:null 不是对象(正在评估“fixture.debugElement.query(platform_browser_1.By.css('#stateRadio')).nativeElement”)

在规范中,el 类型是 HTMLElement,我的 id 为 By.css(),因为 css class-color-dark display-block 也适用于其他输入类型。我该如何解决这个问题?

2个回答

id 属性确实需要唯一。要使 for 循环中的 id 唯一:

将:

*ngFor="let userGroup of userGroups" 

更改为:

*ngFor="let userGroup of userGroups; let i = index;"

同时将:

id="stateRadio"    

更改为如下内容:

id="stateRadio[{{i}}]"
ddubbs
2019-12-27

如果没有看到组件的逻辑,我不得不猜测 userGroups 数组是空的或未定义的,所以没有呈现任何内容,因此:

fixture.debugElement.query(By.css('#stateRadio'))

返回 null。

David G
2017-10-17