Angular mocking troubleshooting FAQ
TypeError: this.titleStrategy?.updateTitle is not a function
Bu hata, Angular 14'te DefaultTitleStrategy
kullanan soyut bir sınıf olan TitleStrategy
için sağlanan kök sağlayıcıyla ilgili ortaya çıkmaktadır.
Angular 14, DefaultTitleStrategy
kullanan soyut bir sınıf olan TitleStrategy
için bir kök sağlayıcı ekledi. Bu nedenle, RouterModule
'u testlerinizde tutarsanız, ng-mocks
TitleStrategy
'yi taklit ettiğinden ve DefaultTitleStrategy
hakkında herhangi bir bilgiye sahip olmadığından, TypeError: this.titleStrategy?.updateTitle is not a function
hatası ile karşılaşabilirsiniz.
Önemli Not: Bu hatayı düzeltmek için,
src/test.ts
veya jest durumundasrc/setup-jest.ts
/src/test-setup.ts
içindeTitleStrategy
için bir varsayılan taklit ayarlamanız gerekir.
— Angular Takımı
import { DefaultTitleStrategy, TitleStrategy } from "@angular/router";
import { MockService, ngMocks } from 'ng-mocks';
// A14 düzeltme: DefaultTitleStrategy'nin TitleStrategy için varsayılan bir taklit yapılması
ngMocks.defaultMock(TitleStrategy, () => MockService(DefaultTitleStrategy));
Hata: NG01052: formGroup expects a FormGroup instance. Please pass one in.
Genellikle, kodunuzda FormBuilder
kullanıyorsanız ve testinizde MockBuilder
ile FormsModule
veya ReactiveFormsModule
'u korumak ve geri kalanını taklit etmek istiyorsanız bu durum meydana gelir.
Angular 15.1.0
'dan itibaren, FormBuilder
bir root
sağlayıcıdır ve bu nedenle FormsModule
veya ReactiveFormsModule
ile birlikte açıkça korunmalıdır.
beforeEach(() =>
MockBuilder(FormComponent)
.keep(FormsModule)
.keep(FormBuilder) // <-- bunu ekleyin
);
Ya da, tüm kök sağlayıcıları NG_MOCKS_ROOT_PROVIDERS
yardımıyla koruyabilirsiniz.
beforeEach(() =>
MockBuilder(FormComponent)
.keep(FormsModule)
.keep(NG_MOCKS_ROOT_PROVIDERS) // <-- bunu ekleyin
);