可从angular4角度服务观察到的测试

时间:2018-10-29 05:39:01

标签: angular

我想用角度分量测试可观察的返回数据。

我创建了一个// Define Agent class class Agent { Point3d Pos = new Point3d(); Vector3d Vec = new Vector3d(); int Alignment; double Separation; double Cohesion; double NeighborRadius; public Agent(Point3d pos, Vector3d vec, int alignment, double separation, double cohesion, double neighborRadius) { Pos = pos; Vec = vec; Alignment = alignment; Separation = separation; Cohesion = cohesion; NeighborRadius = neighborRadius; } } protected override void SolveInstance(IGH_DataAccess DA) { // Initialize Agents for (int i = 0; i < agents; i++) { double xPos = RandomfromDouble(0.0, boundx); double yPos = RandomfromDouble(0.0, boundy); double zPos = RandomfromDouble(0.0, boundz); Point3d pos = new Point3d(xPos, yPos, zPos); // Create Agent Start Position Vector3d vec = new Vector3d(xPos + 1, yPos, zPos); // Create Agent Start Vector Agent agent = new Agent(pos, vec, alignment, separation, cohesion, neighborRadius); allAgents.Add(agent); agentPositions.Add(pos); } }

在这里您可以看到组件+服务的逻辑。

我的测试代码也包含在松弛中。

在我的本地机器上,我遇到了错误:https://stackblitz.com/edit/observable-testing-101

请帮助,我是不熟悉角度测试的人。

1 个答案:

答案 0 :(得分:2)

注意:要在stackblitz中进行测试,需要的设置与上述设置不同。我已经将您的数据复制到这里的Angular Stackblitz测试环境中: https://stackblitz.com/edit/stackoverflow-q-53039354?file=app%2Fmy.component.spec.ts

因为您使用的是Angular 4,所以我必须安装rxjs.compat才能在stackblitz中运行您的代码,因为我在那里使用Angular 7。

设置好之后,我遇到的第一件事是:

Failed: <spyOn> : getPostObservable() method does not exist 
Usage: spyOn(<object>, <methodName>)

当然,您放入stackblitz的data.service.ts文件中不存在getPostObservable()。但是,getTodoObservable()确实存在,因此我将测试更改为指向该功能。

然后我收到了上面提到的消息:

Expected undefined to be 1

我注意到您有两个Fixture.detectChanges()实例,一个在规范前的beforeEach()中,另一个在“应从可观察的事物中得到”的规范中。首次调用夹具.detectChanges时,它将调用生命周期钩进行初始化,并且将执行ngOnInit(),因此,请谨慎设置已在ngOnInit()中使用的任何间谍。我注释了第一个电话,现在测试可以正常进行。

我也注释掉了“ whenStable”,因为这里也不需要它-您将返回一个可观察到的带有“ of”的可观察对象,因此无需这样做。我还注释掉了您对console.log(this.response)的调用,因为您没有定义响应对象,并且在控制台输出中给出了“未定义”。我还添加了console.log(component),因为当试图弄清楚为什么组件看起来不像我期望的那样时,我发现这对输出很有用。 (以防万一,请在开发服务器测试窗口底部单击“控制台”一词以打开控制台日志。)

最后的观察:我真的不喜欢看到NO_ERRORS_SCHEMA用于测试。我从来没有亲自使用过它,因为它倾向于通过不报告来掩盖实际问题,并且我希望看到并解决它们。 :)