Ana içeriğe geç

Hatayı düzeltme: Tür, 2 modülün bildirimlerinin bir parçasıdır

Eğer bu sorunla karşılaşırsanız, büyük ihtimalle, bir mock bildirimi içeren, genellikle bir mock modül, doğrudan TestBed modülünde bildirilmiş bir şeyi içermektedir.

Bir modülün, testimizde ihtiyaç duyduğumuz, örneğin yönlendirmeler gibi bildirimleri dışa aktardığını varsayalım. Aynı zamanda, bileşenimizin bağımlı olduğu, başka bildirimleri olan başka bir modülümüz var; bunu bir mock nesnesine dönüştürmek istiyoruz, ancak aynı zamanda, TestBed aracılığıyla olduğu gibi tutmak istediğimiz aynı modülü içermektedir.

TestBed.configureTestingModule({
imports: [
SharedModule,
MockModule(ModuleWithServicesAndSharedModule),
],
declarations: [
ComponentToTest,
],
});

Sorun açık: mock modülü oluşturduğumuzda, MockModule kendi mock bağımlılıklarını kendi içinde oluşturarak SharedModule için bir mock sınıfı yaratır. Artık içe aktarılan ve mock bildirimleri 2 modülün parçasıdır.

ipucu

Mock modül yüklemeleri sırasında dikkat edilmesi gereken en iyi uygulamalar:

  • Modüllerin doğru ve tutarlı bir şekilde içe aktarıldığından emin olun.
  • Gerekirse, MockBuilder kullanarak daha karmaşık senaryoları yönetin.

Bunu çözmek için, MockModule'a SharedModule'un olduğu gibi kalması gerektiğini bildirmemiz gerekiyor.

İyi ve kötü haberler var. Kötü haber, MockModule'un bunu desteklememesi, ama iyi haber, ng-mocks'ın böyle karmaşık bir durum için MockBuilder sunmasıdır. Tek görevimiz, beforeEach aşamasını, MockModule yerine MockBuilder kullanacak şekilde yeniden yazmaktır.

Olası bir çözüm şöyle görünebilir:

beforeEach(() => {
return MockBuilder(MyComponent, ModuleWithServicesAndSharedModule)
.keep(SharedModule);
});

Yapılandırma, SharedModule ve ModuleWithServicesAndSharedModule'a bağımlı olan ComponentToTest'in test edilmek istendiğini belirtir, ancak SharedModule olduğu gibi kalmalıdır.


Artık inşa sürecinde, MockBuilder SharedModule'u olduğu gibi tutacaktır, bu yüzden mock modülünün bir bağımlılığı olsa bile, bu 2 modülde aynı şeylerin bildirimlerinin yapılmasını önler.

Bunu nasıl kullanacağınıza dair daha ayrıntılı bilgiye, MockBuilder adlı bölümde ulaşabilirsiniz.