首页 > 解决方案 > 茉莉角单元测试长度未定义

问题描述

我有这样的功能

  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 有人知道我哪里出错了吗?

标签: angulartypescriptunit-testingjasmine

解决方案


我敢打赌environmentContainsAllParts.partsbuilding.

尝试这个:

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
});

推荐阅读