Angular Spectator setInput 不适用于非字符串输入

2023-12-29

我已经成功地将我的项目转换为使用 Jest 代替 Karma/Jasmine,并且我有很多测试运行得很好。我正在尝试使用 Spectator (^5.2.1) 进行一个非常简单的测试,但它不起作用。

我正在尝试测试使用 mat-table 呈现表格的库组件。输入是

title:string,
columns: BehaviorSubject<MyColumnDefType> | MyColumnDefType[],
dataSource: MyDataSource | any[]

该组件工作正常,并且我的所有其他测试都工作正常,直到我尝试使用 setInput 将填充的模拟数据源替换为空数据源。

这是设置:

import {SpectatorHost, createHostFactory} from '@ngneat/spectator/jest';
...OTHER IMPORTS...

describe('MyTableComponent', () => {
  let spectator: SpectatorHost<MyTableComponent>;

  const createHost = createHostFactory({
    component: MyTableComponent,
    declarations: [MyTableComponent, MyTableHeaderComponent],
    imports: [
      BrowserAnimationsModule,
      MyMaterialModule,
      FlexLayoutModule,
      RouterTestingModule
    ],
    mocks: [
      MyMaterialModule,
      FlexLayoutModule,
      BrowserAnimationsModule,
      RouterTestingModule
    ]
  });

  beforeAll(() => {
    Object.defineProperty(window, 'matchMedia', {
      value: jest.fn(() => {
        return {
          matches: true,
          addEventListener: jest.fn(),
          removeEventListener: jest.fn()
        };
      })
    });
  });

  const template = `
    <my-table
            title="TEST TABLE"
            [columns]="columns$"
            [dataSource]="mockDataSource$">
    </my-table>`;

  beforeEach( () => {
    spectator = createHost(template, {
      hostProps: {
        columns$: new BehaviorSubject(mockColumns),
        mockDataSource$: new MockDataSource(mockData)
      }
    });
  });
...
  // THIS TEST PASSES SO CREATEHOST CALL ABOVE WORKS. TABLE CREATED WITH EXPECT # OF CELLS
  it ('should all table cells', () => {
    expect(
      spectator.queryAll('.mat-cell').length
    ).toEqual(mockData.length * mockColumns.length);
  });
...
  // THIS IS WHERE IT GOES SOUTH...
  it ('should handle empty results', () => {
    spectator.setInput('dataSource', new MockDataSource([]));
    spectator.setInput('title', 'A NEW TITLE');
    spectator.detectChanges();

    // THIS TEST WORKS
    expect(
      spectator.query('.table-title').innerHTML
    ).toContain('A NEW TITLE');

    // THIS TEST FAILS, queryAll STILL RETURNS ORIGINAL VALUE
    expect(
      spectator.queryAll('.mat-cell').length
    ).toEqual(0);

由于某种原因,“title”上的 setInput 有效,但“dataSource”上的 setInput 不起作用(使用 BehaviourSubject 或简单的数组输入)。


None

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

Angular Spectator setInput 不适用于非字符串输入 的相关文章

随机推荐

  • 在没有模型的数据存储中查询

    我正在尝试在 appengine 中创建一个应用程序来搜索键列表 然后使用此列表从数据存储中删除这些记录 此服务必须是通用服务 因此我无法使用仅按名称搜索的模型当然 可以通过应用程序引擎功能来做到这一点吗 下面是我的代码 但它要求我有一个模
  • Add() 方法为 Code-First 实体框架中的链接模型添加重复行

    以下是将贷款请求添加到数据库的操作 HttpPost public ActionResult Add Models ViewModels Loans LoanEditorViewModel loanEditorViewModel if Mo
  • 如何在 PDO 准备语句中使用 LIKE 子句? [复制]

    这个问题在这里已经有答案了 我有一个这样的sql查询 SELECT FROM tbl name WHERE title Like needle 当我使用此语句手动查询 MySQL 数据库时 它起作用了 但是当我将它与 PDO 一起使用并使用
  • 在 Windows 上安装 git:Git Bash Here 或 git-cheetah shell 扩展?

    我正在 Windows XP 上安装 Git 在安装过程中 安装程序会询问我是否想要 1 上下文菜单条目 Git Bash Here 以及 Git GUI Here 选项 or 2 git cheetah shell 扩展 仅限 32 位
  • Pyspark:自定义窗口函数

    我目前正在尝试提取 PySpark 数据框中连续出现的一系列事件 并对它们进行排序 排名 如下所示 为了方便起见 我已通过以下方式对初始数据框进行了排序 user id and timestamp df ini user id timest
  • 移位是 O(1) 还是 O(n)?

    是否轮班操作O 1 or O n 计算机通常需要更多的操作来移动 31 位而不是移动 1 位 这是否有意义 或者说这是否有意义操作次数换档所需的是constant不管我们需要转移多少地方 PS 想知道是否hardware是一个合适的标签 某
  • 使用 AWS amplify 和 graphql 创建新用户时出现“未经授权”错误

    所以我认为这个问题来自于我不太理解 AWS cognito 用户池和 graphql 模式中的身份验证规则之间的关系 当我运行下面的代码时 我收到消息 未授权访问 User 类型上的 createUser import React from
  • 从模板中获取 Django 表单小部件的类型

    我正在迭代表单的字段 对于某些字段 我想要稍微不同的布局 需要更改 HTML 为了准确地做到这一点 我只需要知道小部件类型 它的类名或类似的名称 在标准 python 中 这很容易 field field widget class name
  • AS3中dispatchEvent()可以带参数吗?

    看这个例子 addEventListener myEventType myFunction argument function myFunction args String Function return function evt Even
  • 使用 Json.NET 读取大整数

    我有一些带有巨大整数的 json 大约有几百位数字 我想将它们解析为 BouncyCastle 的BigInteger https github com onovotny BouncyCastle PCL blob pcl crypto s
  • 如何在 Mac Os X 上将用户添加到 apache 组?

    我实际上正在尝试在我的 MacBook Pro Mac OS X 10 6 上运行 Symfony2 当我通过 apache 启动应用程序时 所有缓存和日志文件都是由 www www 用户 组创建的 但是 我已经必须使用我自己的用户在 CL
  • 使用 rvest 跟随带有相对路径的“下一个”链接

    我正在使用rvest从页面中抓取信息的包http www radiolab org series podcasts http www radiolab org series podcasts 抓取第一页后 我想点击底部的 下一步 链接 抓取
  • 可以将PreparedStatement.addBatch()用于SELECT查询吗?

    想象一下 我有 100 个 SELECT 查询 它们因一个输入而异 可以使用PreparedStatement 作为该值 我在网上看到的所有文档都是关于批量插入 更新 删除的 我从未见过用于 select 语句的批处理 这可以做到吗 如果是
  • 有哪些好的实体框架替代品[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我现在正在使用实体框架 并且经常需要编写内联sql 因为实体框架不支持全文搜索和其他功能 是否有一个 ORM 具有许多支持高级查询的功能
  • Wix 和 .NET Framework(先决条件)

    当客户端计算机上尚未安装所需的 NET Framework 时 如何让 Wix 包下载该包 我已经有条件检查已安装的 NET 版本 但我不确定如何在找不到时下载并安装它 ClickOnce 通过检查属性页中的先决条件自动执行此操作 由于一些
  • android-viewflipper 的简单淡出和淡入动画

    我是android新手 对android动画了解不多 我有一个取景器 我想在其中的图像之间制作动画 这是代码 runnable new Runnable public void run handler postDelayed runnabl
  • Oracle,向字符串(不是数字)添加前导零

    我正在使用 Oracle 工作空间是 TOAD 我需要将字符串设置为短接 10 个字符 然后添加前导零以使它们全部为 10 位数字字符串 例如 如果我有一个像这样的字符串 12H89 需要是 0000012H89 或者 1234 变为 00
  • C++中**是什么意思? [复制]

    这个问题在这里已经有答案了 例如 bool insertInFront IntElement head int data IntElement newElem new IntElement if newElem return false n
  • Google 通讯录 api (gdata) 同步低分辨率照片

    我正在使用 google 联系人 api gdata 在 google 联系人中设置联系人的照片 我正在使用 fiddler 我看到请求是根据Google 通讯录示例 https developers google com google a
  • Angular Spectator setInput 不适用于非字符串输入

    我已经成功地将我的项目转换为使用 Jest 代替 Karma Jasmine 并且我有很多测试运行得很好 我正在尝试使用 Spectator 5 2 1 进行一个非常简单的测试 但它不起作用 我正在尝试测试使用 mat table 呈现表格