angularjs - 使用 Angular 2 模拟组件

标签 angularjs unit-testing testing angular

我正在尝试模拟 'Tour of Heroes' Angular 2 Tutorial 的 Heroes-Component| .但是我不知道如何模拟实例化 HeroesComponent 所需的路由器。我尝试用 Jasmine 创建一个 Spy,但这不起作用,因为它缺少属性“RootComponentType”。

我怎样才能让它工作?

import {HeroesComponent} from "./heroes.component";
import {Router} from "@angular/router-deprecated";
import {HeroService} from "./hero.service";


describe('HeroesComponent', () => {
    let heroes:HeroesComponent;
    let router:Router;
    let service:HeroService;
    beforeEach(() => {
        router = jasmine.createSpyObj('Router', ['navigate']);
        service = new HeroService(/* I will care about this later */);
        heroes = new HeroesComponent(router, service);
    });
    it('should be defined', () => {
        expect(heroes).toBeDefined();
    });
});

它现在正在工作:

describe('HeroesComponent', () => {
    let router:any;
    let heroesComponent:HeroesComponent;
    let service:HeroService;

    beforeEach(() => {
        router = new class {
            navigate = jasmine.createSpy("navigate");
        };
        heroesComponent = new HeroesComponent(router, service);
    });
    it('should be defined', () => {
        expect(heroesComponent).toBeDefined();
    });
});

最佳答案

您可以直接在导航方法上创建 spy 。

  1. 为 DI 使用 addProviders:

    beforeEach(() => addProviders([
    { 
        provide: Router, 
        useClass: class { navigate = jasmine.createSpy("navigate"); }
    }]));
    
  2. 对于组件的直接初始化:

    let router;
    let heroesComponent;
    
    beforeEach(() => {
        router = new class { navigate = jasmine.createSpy("navigate"); };
        heroesComponent = new HeroesComponent(router);
    });
    

关于angularjs - 使用 Angular 2 模拟组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38829533/

相关文章:

angularjs - Controller 在 $state.go 之后仍然运行

javascript - 自定义过滤器对所选阵列进行 Angular 过滤

unit-testing - 有没有办法避免调试器?

c# - Ok Result 的单元测试测试

java - JUnit:调用每个@Test 方法之前的新实例。有什么好处?

angularjs - Chrome 开发工具未映射 ts 源

angularjs - 如何模拟一个 Angular $http 调用并返回一个行为类似于 $http 的 promise 对象

c# - 在哪里放置测试数据?

php - Symfony2 : Functional testing is failing during Fixtures load

testing - 每天自动运行 VSTS 网络测试