angular - 茉莉角单元测试长度未定义
问题描述
我有这样的功能
updateParts(enviromentContainsAllParts: PartsContainsAllParts): Observable<boolean> {
const enviroment = cloneDeep(this.enviroment);
enviroment.containsAllPart = enviromentContainsAllParts.containsAllPart;
for (let index = 0; index < enviromentContainsAllParts.parts.length; index++) {
const currentPart = enviromentContainsAllParts.parts[index];
enviroment.parts.push({
size: currentPart.sizeOfEnviroment
});
}
return of(true);
}
当我尝试对此进行单元测试时
it('should have change enviroment parts', () => {
// GIVEN
const enviroment = cloneDeep(fakeCurrentEnviroment);
service.enviroment = enviroment;
// WHEN
service.updateParts(building).subscribe(data =>
expect(data).toBeTruthy()
);
// THEN
});
我收到这样的错误 TypeError: Cannot read property 'length' of undefined 有人知道我哪里出错了吗?
解决方案
我敢打赌environmentContainsAllParts.parts
在building
.
尝试这个:
it('should have change enviroment parts', (done) => { // add done here to let jasmine know when the test is done
// GIVEN
const mockEnvironmentContainsAllParts = {
containsAllPart: {
}
parts: [] // mock this array however you want
};
const enviroment = cloneDeep(fakeCurrentEnviroment);
service.enviroment = enviroment;
// WHEN
service.updateParts(mockEnvironmentContainsAllParts).subscribe(data => // pass the mock and not building
expect(data).toBeTruthy();
done(); // let jasmine know you're done and we ensured it went inside of this subscribe and did the assertion
);
// THEN
});
推荐阅读
- linux - 防止同时写入Linux中的一个文件
- angular - 在延迟打开后单击外部时隐藏 ngx-bootstrap 工具提示
- python - 使用 python 读取大型二进制文件(>2GB)
- r - 用 dplyr 函数计算
- python - 如何在 VSCode 中加载 Python 交互窗口时运行启动命令
- opengl - GLSL 中是否可以进行可变参数宏扩展?
- c# - Bogus C# - 如何在不为每个属性列出 RuleFor 的情况下获得完全随机的对象?
- powershell - 如何在 My Ansible Playbook 中使用 Azure DevOps 服务器 (TFS) 预定义变量?
- c - 只有当我包含 .c 文件时,C 代码才会编译
- r - 如何在 packageVersion 之后以字符串形式获取完整版本?