2017-05-19 203 views
1

Angular 2和核心测试都是新手。角2茉莉花测试失败

我有一个使用注入MovieService的MovieComponent。试图学习,如此使用的路由参数。代码按预期工作。

describe('MovieComponent',() => { 
let component: MovieComponent; 
let fixture: ComponentFixture<MovieComponent>; 
let options: RequestOptions; 
beforeEach(async(() => { 
TestBed.configureTestingModule({ 
    declarations: [ MovieComponent ], 
imports: [ 
HttpModule 
], 
providers: [ 
{ 
    provide: ActivatedRoute, useValue: { 
    params: Observable.of({ movieName: 'Bah' }) 
    } 
}, MovieService, Http, {provide: ConnectionBackend}, 
], 
    schemas :[NO_ERRORS_SCHEMA ] 
}) 
.compileComponents(); 
})); 

beforeEach(() => { 
options = new RequestOptions({method: RequestMethod.Get}); 
fixture = TestBed.createComponent(MovieComponent); 
component = fixture.componentInstance; 
fixture.detectChanges(); 
}); 

it('should create',() => { 
    expect(component).toBeTruthy(); 
    }); 
}); 

但是,我得到这个测试误差:

TypeError: Cannot read property 'getMovies' of undefined 

在此先感谢。

+0

我假设你的电影服务有一个名为getMovies方法。无论你传递什么东西都没有这种方法。我可以建议你嘲笑电影服务,并提供你自己的价值或类(useClass或useValue)。你只是在测试组件,所以你可能应该嘲笑服务。 – Maccurt

+0

也是你的电影服务返回一个可观察或承诺? – Maccurt

回答

0

你在编译器中运行它吗?它是否编译?我不认为 { provide:MovieService }是正确的。只是通过MovieService象下面这样:`

providers: [ 
    { 
     provide: ActivatedRoute, useValue: { 
     params: Observable.of({ movieName: 'Bah' }) 
     } 
    }, MovieService 
    ] 

`

+0

我正在使用typescript与Angular CLI来构建,测试和运行。我按照你的建议编辑了上面的测试代码,并且还必须包含少数提供者,因为测试发生错误 - ConnectionBackend,Http,Now th错误显示为“TypeError:无法读取未定义的属性'createConnection' – user2693135

+0

现在,同样的问题,但与ConnectionBackend。 – gpanagopoulos

+0

为了让您了解单元测试如何在Angular 2中工作,您必须以与在AppModule中执行测试模块和组件相同的方式构建测试模块和组件。但是,这将会在测试环境中过度使用,您应该使用模拟依赖关系/服务。我建议您阅读下面的文章,了解如何使用依赖项测试组件:https://angular.io/docs/ts/latest/guide/testing.html#!#component-with-dependency – gpanagopoulos