#angular #jasmine #karma-jasmine
#angular #jasmine #карма-жасмин
Вопрос:
У меня возникли проблемы с созданием шпиона для NgForm
объекта. Я использую компонент Angular11.
Мой тест в основном выглядит так (сокращенно):
let component: AuthComponent;
let fixture: ComponentFixture<AuthComponent>;
beforeEach(() => {
TestBed.resetTestEnvironment();
TestBed.initTestEnvironment(BrowserDynamicTestingModule,
platformBrowserDynamicTesting());
....
fixture = TestBed.createComponent(AuthComponent);
....
}
И
describe('onSubmit', () => {
it('makes expected calls', () => {
const ngFormStub: NgForm = <NgForm>{};
spyOn(ngFormStub, 'resetForm').and.callThrough();
component.onSubmit(ngFormStub);
expect(ngFormStub.resetForm).toHaveBeenCalled();
});
});
Нужно ли мне каким-то образом получать значение ngFormStub
из прибора? Я попробовал это, и это не сработало:
const ngFormStub: NgForm = component.form; // this didn't work
Но мой тест показывает эту ошибку:
Error: <spyOn> : could not find an object to spy upon for resetForm()
ПРИМЕЧАНИЕ: в моем компоненте onSubmit()
метод завершается вызовом form.resetForm()
, что я и пытаюсь протестировать.
Вот моя конфигурация тестирования проектов:
"jasmine": "^3.6.3",
"jasmine-core": "^3.6.0",
"jasmine-spec-reporter": "^6.0.0",
"karma": "^5.2.3",
"karma-chrome-launcher": "~2.2.0",
"karma-coverage-istanbul-reporter": "~2.0.1",
"karma-jasmine": "^4.0.1",
"karma-jasmine-html-reporter": "^1.5.4",
Комментарии:
1. ты пробовал
const ngFormStub: NgForm = new NgForm([], []);
? ( github.com/angular/angular/blob/11.0.2/packages/forms/src /… )
Ответ №1:
Оказывается, мне нужно было подделать ссылку на метод следующим образом:
....
fixture.detectChanges();
const ngFormStub: NgForm = <NgForm>{
resetForm: () => null,
value: {
email: "test@test.com",
password: "password"
},
valid: true
};
....
Кроме того, мне нужно было это:
TestBed.configureTestingModule({
declarations: [AuthComponent],
imports: [FormsModule, ReactiveFormsModule],
....