unit-testing - 对 Ionic 2 应用程序进行单元测试时 NavController 出现问题

标签 unit-testing ionic2 injectable

我在使用 NavController 进行单元测试时遇到问题。

我被这个错误困住了:

Cannot resolve all parameters for 'NavController'(?, ?, ?, ?, ?, ?, ?, ?). Make sure that all the parameters are decorated with Inject or have valid type annotations and that 'NavController' is decorated with Injectable.

我尝试了我在网上找到的所有方法,例如使用“@Inject”,但似乎没有任何效果。

代码如下:

组件

import {Page, MenuController, NavController} from 'ionic-angular';
import {SignupPage} from '../signup/signup';

@Page({
  templateUrl: 'build/pages/welcome/welcome.html'
})
export class WelcomePage {

  //  Variables
  constructor(private menu: MenuController, private nav: NavController) {
    this.menu.enable(false);
  }

  goToSignupPage() {
    this.nav.push(SignupPage)
  }
}

单元测试

import {beforeEachProviders, it, describe, expect, inject} from '@angular/core/testing';
import {MenuController, NavController} from 'ionic-angular';
import {WelcomePage} from './welcome';

describe('WelcomePage', () => {

  beforeEachProviders(() => [WelcomePage, MenuController, NavController]);

  it('should have the menu disabled on instatiation', inject([WelcomePage], (welcomePage) => {

    // Expectations
    expect(welcomePage.menu.isEnabled()).toBeFalsy();

  }));

});

知道哪里出了问题吗?

更新:

谢谢大家的回复。

它真的帮助我理解了如何去做。

我没有使用 sinon,但我能够测试是否调用了 push 使用来自 Jasmine 的 spyOn

为此,我对 provide 部分做了细微的更改:

beforeEachProviders(() => [WelcomePage, MenuController,
{ provide: NavController, useValue: {push: NavController.prototype.push} }]);

(可能最好直接为 NavController.prototype 提供访问所有其他属性的权限。)

然后像这样测试:

it('should go to signup page when calling goToSignupPage()', 
inject([WelcomePage], (welcomePage) => {

  // Spies
  spyOn(welcomePage.nav, 'push').and.stub();

  // Call
  welcomePage.goToSignupPage();

  // Expectations
  expect(welcomePage.nav.push).toHaveBeenCalledWith(SignupPage);

}));

最佳答案

在你的单元测试类上试试这个:

beforeEachProviders(() => [WelcomePage, MenuController, provide(NavController, { useValue: WelcomePage })]);

然后:

import {provide} from '@angular/core';

关于unit-testing - 对 Ionic 2 应用程序进行单元测试时 NavController 出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37823865/

相关文章:

angular - 无法解析 LoggedinPage 的所有参数( Angular - 组件/可注入(inject))

swift - 如何对具有多个配置的项目进行单元测试

html - Ionic - 改变 ionic 搜索栏的宽度

Java 模块化,使用 gradle 的 java9-modularity 插件的测试类中的编译问题

javascript - 将数据从 ionic popover/modal 传回调用页面

android - 如何在没有 android studio 的情况下签署 android apk

oop - 当创建的类也需要运行时值时进行依赖注入(inject)?

AngularJS : How to test promise logic with a resolve in it?

c# - 如何在 Windows 上安装 NUnit 3 控制台并运行测试?