gpt4 book ai didi

javascript - 如何在测试中触发 Ionic 的 Platform.ready?

转载 作者:太空狗 更新时间:2023-10-29 19:34:19 24 4
gpt4 key购买 nike

我正在构建我的第一个 Ionic 应用程序并努力遵循 TDD。我遇到了 Ionic 提供的 Platform.ready promise 的绊脚石。在我的一生中,我无法弄清楚如何在测试时触发它。在 Ionic 演示中,它出现在 initializeApp 函数中,如下所示:

initializeApp() {
this.platform.ready().then(() => {
// Okay, so the platform is ready and our plugins are available.
// Here you can do any higher level native things you might need.
this.statusBar.styleDefault();
this.splashScreen.hide();
});
}

在一个简单的测试中,我正在检查 statusBarstyleDefault 方法是否被调用,但我还没有弄清楚如何触发 platform.ready 来解析。编辑:包括整个测试文件以避免关于其中有什么或没有什么的问题。

import { async, TestBed } from '@angular/core/testing';
import { IonicModule } from 'ionic-angular';
import { MyApp } from './app.component';
import { SplashScreenMock as SplashScreen, StatusBarMock as StatusBar, PlatformMock as Platform } from '../../test-config/mocks-ionic';
import { LoginPageMock as LoginPage } from "../../test-config/custom-mocks/login.mock"

describe('App Component', () => {
let fixture, component, SB;

beforeEach(async(() => {
TestBed.configureTestingModule({
declarations:[MyApp, LoginPage],
imports: [IonicModule.forRoot(MyApp)],
providers :[StatusBar, SplashScreen, Platform]
}).compileComponents();
}));

beforeEach(() => {
fixture = TestBed.createComponent(MyApp);
SB = TestBed.get(StatusBar);
spyOn(SB, 'styleDefault').and.callThrough();
component = fixture.componentInstance;
});

describe('general status before initialization', () => {
it('should be defined', () => {
expect(component).toBeDefined();
});

it('should be created', () => {
expect(component instanceof MyApp).toBe(true);
});

it('should have a populated pages array', () => {
expect(component.pages.length).toBeGreaterThan(0);
});
});

describe('general status after initialization', () => {
it('should style the statusbar when the app is initialized', async((done) => {
component.initializeApp();
expect(SB.styleDefault).toHaveBeenCalled();
done();
}));
});
});

我可能拿错了,或者甚至不知道我拿的是什么,但在这一点上我不知道哪里出了问题。将考虑任何和所有选项,并感谢所有帮助。

注意:是的,我已经尝试放入 fixture.detectChanges() 和/或 fixture.autoDetectChanges(true) 并且我收到关于未处理 promise 的错误拒绝并且未找到 LoginPage 的组件因子。我仍在尝试解决该错误,但我不确定它是否与解决 promise 有关。如果您有解决这个小问题的方法,我也很乐意看到。

最佳答案

你的 ready Promise 永远不会解析,你需要控制 platform 依赖并强制它解析:

const plaftorm = TestBed.get(Platform);
spyOn(plaftorm , 'ready').and.callFake(() => Promise.resolve(''));

关于javascript - 如何在测试中触发 Ionic 的 Platform.ready?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45241199/

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