当前位置: 首页 > 知识库问答 >
问题:

TypeError:您在需要流的地方提供了“undefined”。您可以提供一个可观察的、promise的、数组的或可迭代的。在

高高雅
2023-03-14

嗨,我在ngonit中添加了这段代码,用于轮询,添加后,我所有的测试用例都失败了。请帮助如何解决?

  ngOnInit(): void {
this.timeInterval = interval(5000)
.pipe(
  startWith(0),
  switchMap(() => this.deviceService.getDeviceList())
)
.pipe(
  takeUntil(this.deviceService.flag$),
  repeatWhen(() => this.deviceService.flag$)
)
.subscribe((success: any) => {
  this.gridApi?.setRowData(this.updatedData);
  console.log("hello")
  this.updatedData = success;
}, retry(2));

这是完全的错误

HeadlessChrome 88.0.4324 (Windows 10.0.0) DeviceComponent testing columnresize of the grid for other scenario FAILED
    TypeError: You provided 'undefined' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.
        at <Jasmine>
        at subscribeTo (http://localhost:9876/_karma_webpack_/node_modules/rxjs/_esm2015/internal/util/subscribeTo.js:27:1)
        at innerSubscribe (http://localhost:9876/_karma_webpack_/node_modules/rxjs/_esm2015/internal/innerSubscribe.js:69:23)
        at TakeUntilOperator.call (http://localhost:9876/_karma_webpack_/node_modules/rxjs/_esm2015/internal/operators/takeUntil.js:11:52)
        at Observable.subscribe (http://localhost:9876/_karma_webpack_/node_modules/rxjs/_esm2015/internal/Observable.js:23:1)
        at RepeatWhenOperator.call (http://localhost:9876/_karma_webpack_/node_modules/rxjs/_esm2015/internal/operators/repeatWhen.js:11:1)
        at Observable.subscribe (http://localhost:9876/_karma_webpack_/node_modules/rxjs/_esm2015/internal/Observable.js:23:1)
        at DeviceComponent.ngOnInit (http://localhost:9876/_karma_webpack_/src/app/device/device.component.ts:99:4)
        at callHook (http://localhost:9876/_karma_webpack_/node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js:3937:1)
        at callHooks (http://localhost:9876/_karma_webpack_/node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js:3901:1)
        at executeInitAndCheckHooks (http://localhost:9876/_karma_webpack_/node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js:3842:1)
    Failed: Cannot read property 'unsubscribe' of undefined
        at <Jasmine>
        at DeviceComponent.ngOnDestroy (http://localhost:9876/_karma_webpack_/main.js:28373:23)
        at UserContext.<anonymous> (http://localhost:9876/_karma_webpack_/src/app/device/device.component.spec.ts:196:15)
        at ZoneDelegate.invoke (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-evergreen.js:365:1)
        at AsyncTestZoneSpec.onInvoke (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-testing.js:763:1)
        at ProxyZoneSpec.onInvoke (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-testing.js:302:1)
        at ZoneDelegate.invoke (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-evergreen.js:364:1)
        at Zone.runGuarded (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-evergreen.js:134:1)
        at runInTestZone (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-testing.js:885:1)
        at UserContext.<anonymous> (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-testing.js:823:1)
        at ZoneDelegate.invoke (http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-evergreen.js:365:1)

HeadlessChrome 88.04324(Windows 10.0.0):已执行第1个,共385个(1个失败)(0秒/1.732秒)HeadlessChrome 880.4324(Windows 10.00)DeviceComponent测试其他场景的网格列大小失败类型错误:您在预期流的位置提供了“未定义”。您可以提供Observable、Promise、Array或Iterable。位于subscribeTo(http://localhost:9876/karma_webpack/node_modules/rxjs/_esm2015/internal/util/subscribeTo.js:27:1)位于innerSubscribe(http://localhost:9876/karma_webpack/node_modules/rxjs/_esm2015/internal/innerSubscribe.js:69:23)在TakeUntilOperator。呼叫(http://localhost:9876/karma_webpack/node_modules/rxjs/_esm2015/internal/operators/takeUntil.js:11:52)在Observable。订阅(http://localhost:9876/karma_webpack/node_modules/rxjs/_esm2015/internal/Observable.js:23:1)在RepeatWhenOperator。呼叫(http://localhost:9876/karma_webpack/node_modules/rxjs/_esm2015/internal/operators/repeatWhen.js:11:1)在Observable。订阅(http://localhost:9876/karma_webpack/node_modules/rxjs/_esm2015/internal/Observable.js:23:1)位于DeviceComponent。ng初始(http://localhost:9876/karma_webpack/src/app/device/device.component.ts:99:4)在callHook(http://localhost:9876/karma_webpack/node_modules/@angular/core/ivy_ngcc/fesm2015/core。js:3937:1)在callHooks(http://localhost:9876/karma_webpack/node_modules/@angular/core/ivy_ngcc/fesm2015/core。js:3901:1)在executeInitAndCheckHooks(http://localhost:9876/karma_webpack/node_modules/@angular/core/ivy_ngcc/fesm2015/core。js:3842:1)失败:无法读取DeviceComponent处未定义的属性“unsubscribe”。ng销毁(http://localhost:9876/karma_webpack/main.js:28373:23)在UserContext上。(http://localhost:9876/karma_webpack/src/app/device/device.component.spec.ts:196:15)ZoneDelegate。调用(http://localhost:9876/karma_webpack/node_modules/zone.js/dist/zone-常青树.js:365:1)

共有3个答案

纪晨
2023-03-14

我有一个类似的问题。

我建议检查这些方法是否在您的 2 个 switchMap 运算符调用中返回可观察量:

this.deviceService.getDeviceList()
this.deviceService.flag$

这就是我的原因。switchMap运算符必须返回一个可观察值。所以可能发生的情况是,在你的代码中没有可观察的订阅。

如果你不需要在这些方法中返回可观察量,请尝试使用 of(),如下所示:

// DO NOT forget to import 'of' from rxjs :)
  ngOnInit(): void {
this.timeInterval = interval(5000)
.pipe(
  startWith(0),
  switchMap(() => of(this.deviceService.getDeviceList()))
)
.pipe(
  takeUntil(this.deviceService.flag$),
  repeatWhen(() => of(this.deviceService.flag$))
)
.subscribe((success: any) => {
  this.gridApi?.setRowData(this.updatedData);
  console.log("hello")
  this.updatedData = success;
}, retry(2));
斜俊
2023-03-14

>

  • 首先禁用所有的测试

    逐个启用,直到发现有问题的单元测试 它应该是使用模拟方法并返回可观察而不是值的提供程序,例如

    {provide:TranslateService,useValue:{get:()=

    • 瞬间应返回值,不可观察
    • getInfos应该返回一些可观察的结果,而不是未定义的
    • getList应该返回可观察的数组,而不是具体的空数组

    对我来说,这些案例中的任何一个都确实导致了不一致的真阴性和假阳性……

    祝你好运,这个是个卑鄙的人…

  • 魏彦
    2023-03-14

    尝试调试它:

      ngOnInit(): void {
      console.log('this.deviceService.getDeviceList()', this.deviceService.getDeviceList());
      console.log('this.deviceService.flag$', this.device.getDeviceList());
    
      // make sure the above logs are not defined. 
     // If they are, you're not mocking them correctly when `ngOnInit` is called. 
     // `ngOnInit` is called after the first `fixture.detectChanges()` after 
     // the `TestBed.configureTestingModule({}).compileComponents();`.
    
    this.timeInterval = interval(5000)
    .pipe(
      startWith(0),
      switchMap(() => this.deviceService.getDeviceList())
    )
    .pipe(
      takeUntil(this.deviceService.flag$),
      repeatWhen(() => this.deviceService.flag$)
    )
    .subscribe((success: any) => {
      this.gridApi?.setRowData(this.updatedData);
      console.log("hello")
      this.updatedData = success;
    }, retry(2));
    
     类似资料:
    • 我尝试用angular5实现一个登录特性。我有一个我不明白的错误。 下面是登录类: 在user.service.ts中,我有一个身份验证方法: 这是我的登录表单: 我的代码编译好了,我可以访问登录页面。但是当我输入登录名和密码时,我有一个错误。我看不到对我的服务器的请求。我认为错误发生在我的超文本传输协议请求之前。这是我收到的错误: TypeError:您在需要流的地方提供了“未定义”。您可以提供

    • 有人能向我解释一下为什么运算符可以接受返回或的函数吗? 官方文件说: FlatMap运算符通过将您指定的函数应用于源可观察对象发出的每个项目来转换可观察对象,其中该函数返回本身发出项目的可观察对象。 为什么它也可以返回数组? 例如,它们都是有效的: 但这不起作用:

    • Kotlin编译器给了我以下警告: 警告:(399,1)Kotlin:内联“…”的预期性能影响可能是无关紧要的。内联最适用于具有lambda参数的函数 在这种情况下,我想取消显示此警告。但是,我不知道给什么值,也找不到任何文档说明接受什么值。 可以为提供哪些可能的值,它们是什么意思?

    • 我曾经遇到过一个关于颤振的问题,我不得不下载jdk。我给了它一个路径D:/jdk,但随后我创建了一个新分区,并在C:\Program Files\Java\jdk-16.0.1上再次下载了它。现在,当我在Visual Studio代码中运行应用程序时,出现一个错误: 失败:构建失败,有一个异常。 > 错误:提供的javaHome必须是有效的目录。您提供了:D:\jdk 尝试:使用--stacktr

    • 我想在汇流提供的连接器上进行一些定制。有人能指导我怎么做吗?在我的用例中,我使用的是Http接收器连接器(https://www.confluent.io/hub/confluentinc/kafka-connect-http). 我找不到相同的git代码。

    • 使用Symfony 2,当我尝试传递参数/变量时出现此错误: 这是实体/模型: 首先,我有一个分支,它可以允许用户修改/更新Parc,我使用JavaScript允许html中的<code>select标签 这是JavaScript代码,它允许我在选择显示更新表单的其他路由后重定向用户: 现在,树枝向谁显示表单以更新所选parc: 因此,当我在“更新”按钮上提交时,出现了错误: 控制器“my bun