角度测试随机中断:“未捕获类型错误:您在预期流的位置提供了‘未定义’。”

2023-12-31

我们有一个中等大小的 Angular 应用程序,目前约有 700 个单元测试。 几周前,完美的测试开始出现问题。更奇怪的是:运行测试两次可能会产生不同的结果,即不同的测试可能会失败。 在控制台中,我们总是发现错误:

未捕获的类型错误:您在需要流的地方提供了“未定义”。

但堆栈跟踪没有提示错误的根源实际位于何处(请参阅本文末尾)。堆栈跟踪显示了与mergeMap运算符,但事实证明,我们在应用程序中和测试中都没有使用此运算符。

我单步执行了所有规范文件并让它们自行运行(使用fdescribe)。每个规格文件均顺利通过。将它们全部运行在一起会导致所描述的损坏。

当然,我的猜测是我们面临一个异步问题,因此我努力完成所有测试并将每个测试包装在异步环境中。我还检查了每个订阅在某个时刻都会被取消订阅 - 我们的应用程序就是这种情况,但对于我们的测试而言并非总是如此。 但是,错误仍然存​​在。

这对我们的项目来说是一个大问题。任何建议都非常受欢迎。 也许有人知道一种方法来找到导致问题的测试部分?

我们现在使用 jasmine 3.3.0、karma v3.1.4 和 Angular 7.1.3。 我们一周前对 jasmine 和 Angular 进行了更新,因为我们希望摆脱这个问题。只有一件事发生了变化:在更新之前,测试不会随机中断,而是在固定数量的测试中中断(在我们的例子中,639 次测试将导致测试中断,638、640、641...等将通过;648会再次破裂)。我认为这与茉莉花现在使用的随机种子有关。

这是完整的堆栈跟踪:

<!-- language: lang-none -->
Uncaught TypeError: You provided 'undefined' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.
    at subscribeTo (:9876/_karma_webpack_/webpack:/node_modules/rxjs/_esm5/internal/util/subscribeTo.js:41)
    at subscribeToResult (:9876/_karma_webpack_/webpack:/node_modules/rxjs/_esm5/internal/util/subscribeToResult.js:11)
    at MergeMapSubscriber.push../node_modules/rxjs/_esm5/internal/operators/mergeMap.js.MergeMapSubscriber._innerSub (:9876/_karma_webpack_/webpack:/node_modules/rxjs/_esm5/internal/operators/mergeMap.js:74)
    at MergeMapSubscriber.push../node_modules/rxjs/_esm5/internal/operators/mergeMap.js.MergeMapSubscriber._tryNext (:9876/_karma_webpack_/webpack:/node_modules/rxjs/_esm5/internal/operators/mergeMap.js:68)
    at MergeMapSubscriber.push../node_modules/rxjs/_esm5/internal/operators/mergeMap.js.MergeMapSubscriber._next (:9876/_karma_webpack_/webpack:/node_modules/rxjs/_esm5/internal/operators/mergeMap.js:51)
    at MergeMapSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.next (:9876/_karma_webpack_/webpack:/node_modules/rxjs/_esm5/internal/Subscriber.js:54)
    at Observable._subscribe (:9876/_karma_webpack_/webpack:/node_modules/rxjs/_esm5/internal/util/subscribeToArray.js:5)
    at Observable.push../node_modules/rxjs/_esm5/internal/Observable.js.Observable._trySubscribe (:9876/_karma_webpack_/webpack:/node_modules/rxjs/_esm5/internal/Observable.js:43)
    at Observable.push../node_modules/rxjs/_esm5/internal/Observable.js.Observable.subscribe (:9876/_karma_webpack_/webpack:/node_modules/rxjs/_esm5/internal/Observable.js:29)
    at MergeMapOperator.push../node_modules/rxjs/_esm5/internal/operators/mergeMap.js.MergeMapOperator.call (:9876/_karma_webpack_/webpack:/node_modules/rxjs/_esm5/internal/operators/mergeMap.js:29)
    at ____________________Elapsed_3_ms__At__Thu_Dec_27_2018_10_03_35_GMT_0100__Mitteleurop_ische_Normalzeit_ ()
    at Object.onScheduleTask (:9876/_karma_webpack_/webpack:/node_modules/zone.js/dist/zone-testing.js:108)
    at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.scheduleTask (:9876/_karma_webpack_/webpack:/node_modules/zone.js/dist/zone.js:401)
    at Object.onScheduleTask (:9876/_karma_webpack_/webpack:/node_modules/zone.js/dist/zone.js:297)
    at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.scheduleTask (:9876/_karma_webpack_/webpack:/node_modules/zone.js/dist/zone.js:401)
    at Zone.push../node_modules/zone.js/dist/zone.js.Zone.scheduleTask (:9876/_karma_webpack_/webpack:/node_modules/zone.js/dist/zone.js:232)
    at Zone.push../node_modules/zone.js/dist/zone.js.Zone.scheduleMacroTask (:9876/_karma_webpack_/webpack:/node_modules/zone.js/dist/zone.js:255)
    at scheduleMacroTaskWithCurrentZone (:9876/_karma_webpack_/webpack:/node_modules/zone.js/dist/zone.js:1114)
    at :9876/_karma_webpack_/webpack:/node_modules/zone.js/dist/zone.js:2090

噢,听起来事情变得不稳定了。最近我们遇到了单元测试随机中断的情况。您是否一直在更新 Angular 和 Karma 版本?

我们遇到的问题是,默认设置单元测试的方式(通过 Angular CLI)已经改变,并且旧的测试没有运行正确的测试async ways.

您看到的错误确实与我们看到的不同,但我确信这是一个值得探索的途径,可以消除单元测试设置引入的任何脆弱性。

摘自https://angular.io/guide/testing#calling-compilecomponents https://angular.io/guide/testing#calling-compilecomponents

describe('BannerComponent', () => {
    let component: BannerComponent
    let fixture: ComponentFixture<BannerComponent>

    beforeEach(async(() => {
      TestBed.configureTestingModule({
        declarations: [ BannerComponent ],
      }).compileComponents();  // compile template and css
    }));

    beforeEach(() => {
        fixture = TestBed.createComponent(BannerComponent)
        component = fixture.componentInstance
        fixture.detectChanges()
    })

    it('should create', () => {
        expect(component).toBeTruthy()
    })

第一次要特别注意beforeEach()其中有一个async() => {}在那里,以及一个必需的.compileComponent().

第二beforeEach()是定义和填充component共享上下文中的变量describe().

我希望这可以帮助您找出导致片状现象的原因。由于源自 RxJS 的迭代器问题似乎指向依赖于先前测试设置的状态的测试,其中它接收 Observable 形式的输入。如果此 Observable 是在测试执行之后设置或定义的,那么您可能会遇到与您所描述的问题类似的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

角度测试随机中断:“未捕获类型错误:您在预期流的位置提供了‘未定义’。” 的相关文章

随机推荐

  • 是否可以在 VSCode 中让一个选项卡具有文件的垂直分割视图,而其他选项卡只有一个文件?

    在 Visual Studio Code 中 我可以拆分视图并并排查看同一文件的两个区域 但从那时起我似乎就有了两种看法 每面都有多个选项卡可供选择 这样我就可以在任意一半的文件之间切换 但我真正想要的是在包含一个文件的两个部分的视图和其他
  • Python Plotly:向具有多个子图的散点图添加水平线

    我有一个在 Plotly dash 上运行的散点图 这是代码 import dash import dash core components as dcc import dash html components as html import
  • Gridview 在 Windows Phone 8.1 中不水平滚动

    Gridview 在 Windows Phone 应用程序中不水平滚动 而是垂直滚动 我只是将 Windows 8 1 应用程序的代码复制粘贴到 Windows Phone 8 1 但它是垂直滚动的 这是xaml代码
  • 如何使用 SQLAlchemy for Scrapy 创建 pg_trgm 索引?

    我正在使用 Scrapy 从网络论坛中抓取数据 我使用 SQLAlchemy 将此数据存储在 PostgreSQL 数据库中 表和列创建得很好 但是 我无法让 SQLAlchemy 在其中一列上创建索引 我正在尝试使用 gin 创建一个三元
  • 负载测试软件[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何将视频数据转换为NSURL

    我有一个从服务器获取并作为数据接收的视频 我试图将原始数据覆盖到 URL 中 以便我可以使用它来实例化 AVPlayerItem 并在手机上播放视频 但是 当我打印 videoDataString 时 此代码返回 nil 如果我打印 vid
  • 如何读取二进制数作为输入?

    有没有办法让用户在C或C 中输入二进制数 如果我们写类似的东西 int a 0b1010 std cout lt lt a lt lt std endl 然后输出结果为 10 当使用适当的编译器扩展时 但是当我们尝试写时 int n std
  • 序列化 swing/awt 组件

    我正在尝试序列化 JPanel 但每次都会收到此错误 java io WriteAbortedException writing aborted java io NotSerializableException javax swing Gr
  • 爬行亚马逊时出现问题,元素无法滚动到视图中

    我在亚马逊上抓取页面时遇到问题 我尝试过使用 执行JS脚本 动作链 显式等待 似乎什么都不起作用 一切都会引发一个异常或错误或另一个 基本脚本 ff create webdriver instance ff get https www am
  • 在网络浏览器中使用 JavaScript 读取文件流

    在网络浏览器中 我想计算本地文件系统中一个大文件的 sha1 校验和 而不将其发送到服务器 File API http www w3 org TR FileAPI支持从本地磁盘读取文件 但我猜它会读取整个文件并将其全部放入内存中 如果文件大
  • 使用已安装的 xCon 进行越狱检测

    我对检测 iOS 越狱有疑问 我使用了一些东西来检测它 它们工作正常 但是当我安装 xCon 时 我的应用程序不再检测越狱 我使用了以下技术 检查cydia是否存在 检查 Cydia 应用方案 检查沙箱外的写入情况 检查符号链接是否存在 检
  • SWIG:未定义类型映射

    我有一个 C 类 我正在尝试使用 SWIG 为 Python 包装该类 我在尝试包装以数组作为输入的函数之一时遇到问题 这是头文件 class dyndiff data t private double H 3 double GAMMA d
  • Hilt 在没有构造函数参数的情况下注入 ViewModel

    使用新的依赖注入库Hilt 如何注入一些类ViewModel没有构造函数参数和ViewModelFactory 是否可以 Like in Fragment 我们只使用 AndroidEntryPoint and Inject 如何在没有构造
  • 如何在 Batik SVG 库中使用自定义字体?

    我正在开发一个为衣服创建模板的 Java 程序 用户输入他们想要在衣服上看到的单词 系统会创建一个 PDF 模板 为了创建模板 我以编程方式创建了一个 SVG 文档 然后使用 Batik 将 SVG 转码为 PDF 格式 我的客户现在希望能
  • 加载大量数据(40 列,2000 行)时,WPF 网格滚动缓慢且断断续续

    简而言之 当加载大量纯数据时 我们无法从任何类型的 WPF 网格 项目控件获得合理的滚动性能 我们使用 DevExpress WPF 网格创建了一个静态独立原型并将其上传到此处 http jump fm QOTDL http jump fm
  • 数据库模式与数据库表空间?

    当我阅读时正在阅读我的数据库 Schema 是对象的容器 表空间 对象的逻辑存储单元 谁能解释一下它们之间的区别吗 模式是一个命名空间 一个逻辑上的东西 它用于组织names数据库对象 它与数据的存储方式无关 表空间是一个物理事物 它是数据
  • iPhone + 应用内购买测试

    我已经在现有应用程序之一中实现了应用程序内购买 我还创建了 SandBox 帐户来测试它 我已经运行了该应用程序并对其进行了测试 它运行完美 因为 我已经测试过了 通过购买该功能 就意味着我已经购买了该功能 现在 代码发生了变化 我想重新测
  • sqlalchemy 缓存一些查询

    我在一个实时网站上运行这个 当用户登录时 我查询他的个人资料以查看他有多少可用的 积分 积分是通过贝宝购买的 如果一个人购买积分并且付款成功 查询仍然显示 0 积分 即使我在 phpmyadmin 中运行相同的查询它会带来正确的结果 如果我
  • GZIP压缩级别对解压有影响吗

    据我了解 GZIP 是 LZ77 和 Huffman 编码的组合 可以配置 1 9 之间的级别 其中 1 表示最快的压缩 较少压缩 9 表示最慢的压缩方法 最佳压缩 我的问题是 级别的选择only影响压缩过程 或者根据用于压缩的级别 解压缩
  • 角度测试随机中断:“未捕获类型错误:您在预期流的位置提供了‘未定义’。”

    我们有一个中等大小的 Angular 应用程序 目前约有 700 个单元测试 几周前 完美的测试开始出现问题 更奇怪的是 运行测试两次可能会产生不同的结果 即不同的测试可能会失败 在控制台中 我们总是发现错误 未捕获的类型错误 您在需要流的