gpt4 book ai didi

使用(提交)时 Angular 单元测试失败

转载 作者:行者123 更新时间:2023-12-02 17:14:12 25 4
gpt4 key购买 nike

使用 Angular v4.4.4,我正在使用 (submit) 保存一个表单<form> 上的事件元素。在实时代码上,一切正常。但是,在单元测试中单击 <button>不触发 (submit)并且测试失败。例如,

组件(伪代码):

@Component({
template: `
<form [formGroup]="formGroup" (submit)="onSave()">
Your name: <input type="text" formControlName="name">
<button id="saveButton">Save</button>
</form>
`
})
export class FooComponent {
public formGroup: FormGroup;

public onSave(): void {
// save and route somewhere
}
}

单元测试(伪代码):

describe('FooComponent', () => {
let fixture, component, _router, routerSpy;

beforeAll(done => (async() => {
TestBed.configureTestingModule({
imports: [
RouterTestingModule.withRoutes([]),
FormsModule,
ReactiveFormsModule
]
});

fixture = TestBed.createComponent(FooComponent);
component = fixture.componentInstance;
_router = fixture.debugElement.injector.get(Router);
routerSpy = spyOn(_router, 'navigate');
fixture.detectChanges();
})().then(done).catch(done.fail));

it('should save the form', () => {
const saveButton = fixture.debugElement.query(By.css('#saveButton'));
saveButton.triggerEventHandler('click', null);
expect(routerSpy).toHaveBeenCalled();

// the test fails because the form is not actually submitted
});
});

我确定问题出在 (submit) 上事件,因为如果我删除它并移动 onSave()调用(click)在按钮上,单元测试确实有效。

所以这在单元测试中失败了:

<form [formGroup]="formGroup" (submit)="onSave()">

但这成功了:

<button id="saveButton" (click)="onSave()">Save</button>

我在规范中做错了什么?

最佳答案

因为按钮上没有事件处理程序。这就是 triggerEventHandler 无法触发按钮上的任何处理程序的原因。在您的情况下,您必须使用 saveButton.nativeElement.click() 因为现在点击事件将冒泡并且 submit 事件将被触发

关于使用(提交)时 Angular 单元测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47387325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com