2017-08-26 60 views
0

在我的角2次组件测试,我用的是下面传递一个参数:设置并通过不同的PARAMS与角提供商ActivatedRoute

providers: [ 
    { provide: ActivatedRoute, useValue: {'params': Observable.from([{'id': 5}])} } 
] 

然而,在我的步骤定义,我想能够为id参数传递不同的值可以为不同的id测试不同的场景。我在某处读过,使用Subject更适合这个,而不是使用Observable。

因此,我改变了方法:

public static initializeComponent(callback: cucumber.IStepCallback): void { 
let params = new Subject<Params>(); 
params.next([{'id': 5}]); 

TestBed.configureTestingModule({ 
    providers: [ 
    { provide: ActivatedRoute, useValue: {'params': params }} 
    ] 
}); 

希望在我的每个步骤定义,我可以改变的 'id' 参数”使用的值:

params.next([ {的 'id':6}]); params.next([{'id':7}]);

我的方法是否正确?如果是的话,它不起作用,甚至是第一次当我设置id为5。或者在方法中有问题,或者我可能错误地设置了 params.next?或者还有其他问题?我对这个东西并不是很熟悉,并且第一次尝试它,所以我不确定什么是错的。任何投入?

+0

你能展示你的组件体吗?你在哪里听ActivatedRoute? –

+0

我在上面添加了一个更新,显示了组件端的代码,以及它可以与Observable一起正常工作的事实。只有主题,它不起作用 – user1892775

+0

你检查过文档吗?我回答了。 –

回答

1

这里是文档中的情况。它正在描述你需要的是什么。 https://angular.io/guide/testing#create-an-observable-test-double

你试过了吗?如果是的话,你可以解释一下你有什么问题。

您的解决方案和指南解决方案有什么区别?那么,指南就是以BehaviourSubject为例,并不是因为主题。差异是在主体你只得到新的emmitted值,但在BehaviourSubject你也可以立即得到当前值。

+0

从您发送的文档中,我无法确定我在上面的代码中使用主题传递参数时犯的错误。用我使用的第一个Observable方法,它进入我的组件中的构造函数。但是,用我采取的主题方法,它不进入构造函数 – user1892775

+0

我修复了链接。我从手机发短信,所以我missclicked。我也会更新一下我的答案。 –

+0

我更改为使用BehaviorSubject,但仍然存在我在Update 2 ***下的原始问题中添加的问题。你有什么建议吗? – user1892775