微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 angular 服务中初始化时,array.some 在运行 ng-test 期间不是函数

如何解决在 angular 服务中初始化时,array.some 在运行 ng-test 期间不是函数

我通过从缓存中获取 allUsers 来初始化它,然后使用 specialUserExists (Array.prototype.some() for reference) 将布尔值从 allUsers 分配给 allUsers.some()

service.ts

@Injectable({
  providedIn: 'root'
})
export class SomeService {

  private allUsers: User[] = this.storageService.getItem('SOME_KEY');
  private specialUserExists = this.allUsers.some(user => user.inSpecialGroup);

  constructor(
    private filterService: FilterService,private storageService: StorageService,) { }
}

service.specs.ts 中,我编写了如下测试用例 service.specs.ts

describe('SomeService',() => {
  let service: SomeService;

  beforeEach(() => {
    service = new SomeService(
      mockFilterService.object(),mockStorageService.object(),);
  });

  it('should be created',() => {
    expect(service).toBeTruthy();
  });
}

在运行 ng-test 时出现以下错误

<SomeService> should be created
TypeError: this.allUsers.some is not a function
    at <Jasmine>
    at new BreakdownService (http://localhost:9876/_karma_webpack_/src/app/_shared/services/some.service.ts:33:48)
    at UserContext.<anonymous> (http://localhost:9876/_karma_webpack_/src/app/_shared/services/some.service.spec.ts:19:15)
    at ZoneDelegate.invoke (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-evergreen.js:359:1)
    at ProxyZonespec.onInvoke (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-testing.js:308:1)
    at ZoneDelegate.invoke (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-evergreen.js:358:1)
    at Zone.run (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-evergreen.js:124:1)
    at runInTestZone (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-testing.js:561:1)
    at UserContext.<anonymous> (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-testing.js:576:1)
    at <Jasmine>
    at ZoneDelegate.invokeTask (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-evergreen.js:391:1)
    at Zone.runTask (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-evergreen.js:168:1)
Expected undefined to be truthy.
error properties: Object({ originalStack: 'Error: Expected undefined to be truthy.
    at new ZoneAwareError (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-error.js:100:1)
    at stack (http://localhost:9876/base/node_modules/jasmine-core/lib/jasmine-core/jasmine.js?)
    at buildExpectationResult (http://localhost:9876/base/node_modules/jasmine-core/lib/jasmine-core/jasmine.js?)
    at Spec.expectationResultFactory (http://localhost:9876/base/node_modules/jasmine-core/lib/jasmine-core/jasmine.js?)
    at Spec.addExpectationResult (http://localhost:9876/base/node_modules/jasmine-core/lib/jasmine-core/jasmine.js?)
    at Expector.addExpectationResult (http://localhost:9876/base/node_modules/jasmine-core/lib/jasmine-core/jasmine.js?)
    at Exp ...
Error: Expected undefined to be truthy.
    at <Jasmine>

代码按预期运行并正确给出输出。 我无法找出测试用例错误

我该如何解决这个问题?

解决方法

您必须确保 mockStorageService 具有返回数组的 getItem 方法。

尝试这样的事情:

describe('SomeService',() => {
  let service: SomeService;

  beforeEach(() => {
    service = new SomeService(
      mockFilterService.object(),{
        getItem(key: string): {
          return []; // mock the array to be returned here.
        } 
      }
    );
  });

  it('should be created',() => {
    expect(service).toBeTruthy();
  });
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?