我想用角度分量测试可观察的返回数据。
我创建了一个// 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
请帮助,我是不熟悉角度测试的人。
答案 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用于测试。我从来没有亲自使用过它,因为它倾向于通过不报告来掩盖实际问题,并且我希望看到并解决它们。 :)