如何解决在 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 举报,一经查实,本站将立刻删除。