使用 Ionic ion-infinite-scroll 作为子组件(Ionic 4)测试任何组件时出错

问题描述 投票:0回答:1

首先,这不是一个“破坏性”问题,但我不喜欢运行单元测试时出现错误。所以无论如何,如果您使用 Ionic 创建页面/组件并使用 ion-infinite-scroll 组件,然后继续对该组件进行单元测试,那么将会

always
出现如下错误: An error was thrown in afterAll Uncaught TypeError: Cannot read property 'apply' of undefined thrown

现在这不会使测试套件失败,但它确实会显示在控制台中并将其弄乱。我尝试使用 
ng-mocks

来模拟这个子组件,但这似乎仍然存在。我正在使用 spectator 和 Jasmine 的默认设置。我认为这个问题与使用这些工具无关。有谁知道如何正确模拟 ion-infinite-scroll 组件,以便测试套件不会调用实际组件上的方法?


这是我尝试过的:

describe('SomePage', () => { let spectator: Spectator<SomePage>; const infiniteScrollStub = { complete: jasmine.createSpy('complete') }; const createComponent = createRoutingFactory({ component: SomePage, declarations: [ IonInfiniteScroll ], providers: [ { provide: IonInfiniteScroll, useValue: infiniteScrollStub } ], params: {} }); beforeEach(() => spectator = createComponent()); it('should create', () => { expect(spectator.component).toBeTruthy(); }); });

===

An error was thrown in afterAll Uncaught TypeError: Cannot read property 'apply' of undefined thrown


describe('SomePage', () => { let spectator: Spectator<SomePage>; const infiniteScrollStub = { complete: jasmine.createSpy('complete') }; const createComponent = createRoutingFactory({ component: SomePage, declarations: [ MockComponent(IonInfiniteScroll) ], params: {} }); beforeEach(() => spectator = createComponent()); it('should create', () => { expect(spectator.component).toBeTruthy(); }); });
===

Error: Multiple components match node with tagname ion-infinite-scroll

测试通过了第一个示例,但最后出现了丑陋的错误。
由于这个原因,第二个示例的测试失败了。

有什么想法吗?

angular unit-testing ionic4 ng-mocks
1个回答
0
投票

在测试中,只有 SUT 不应该被嘲笑。所以正确的做法是mock

IonicModule

:

MockModule(IonicModule)
,压制它对环境和逻辑的要求。
    

© www.soinside.com 2019 - 2024. All rights reserved.