如何在 Cypress e2e 测试中使用 Angular Store

2024-01-31

我需要在我的 Angular Store 中注入一个值(调度一个操作),以使我的 Cypress e2e 测试正常工作。事实上,我需要我的商店包含 { isLoggedIn : true } 来访问应用程序中的任何页面,否则用户将被重定向到登录页面。
我在这里发现了类似的问题Cypress - 以编程方式操作 Angular/NGRX 应用程序 https://stackoverflow.com/questions/57542554/cypress-programmatically-manipulating-angular-ngrx-app,但答案似乎不适用于我的情况。
我总是收到错误:“cy.its() 等待指定的属性存储存在,但它从未存在。”
运行测试时,cypress 的控制台中没有打印任何console.log。
这是我在 app.component.ts 中的代码

export interface IWindowCypress {
  store: Store;
  Cypress: unknown;
}

@Component({
  selector: 'my-root',
  templateUrl: './app.component.html',
  changeDetection: ChangeDetectionStrategy.OnPush,
})
export class AppComponent {
  constructor(protected store: Store) {
    const windowWithStore: IWindowCypress = window as unknown as IWindowCypress;
    console.log('AppComponent');
    if (windowWithStore.Cypress) {
      console.log('save store');
      windowWithStore.store = store;
    }
  }
}

这是我的柏树测试

describe('ContactListComponent', () => {
  before(() => {
    cy.window().its('store').invoke('dispatch', { type: '[User Effect] Load user success', user: { isLoggedIn : true } });
  });

// some tests

所以我想知道我在这里错过了什么或者我做错了什么。有人可以帮忙吗?谢谢 !
PS:如果我运行我的应用程序npm run start我在控制台中打印了“AppComponent”


您的代码和参考问题之间的区别是

window.store = this.store;   // referring to component instance store property

我不知道为什么注射store不工作,但尝试

export class AppComponent {
  constructor(protected store: Store) {
    const windowWithStore: IWindowCypress = window as unknown as IWindowCypress;
    if (windowWithStore.Cypress) {
      windowWithStore.store = this.store;
    }
  }
}

您可能还希望接口属性是可选的,因为它们并不总是存在。

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

如何在 Cypress e2e 测试中使用 Angular Store 的相关文章

随机推荐

  • 接口,无法在Unity配置上构建

    我在这个项目上使用 Unity 时遇到问题 错误是 当前类型 Business Interfaces IPersonnelBusiness 是 接口 无法构造 您是否缺少类型映射 由于堆栈溢出 我已将 Unity 更新到最新版本issue
  • Laravel PHPunit Dataprovider 错误“指定的数据提供者无效”

    我正在使用 dataprovider 并从数据库中获取数据 public function logoProvider result Event inRandomOrder gt select id gt whereNotNull logo
  • 如何在 bash 中使用变量的值作为另一个变量的名称[重复]

    这个问题在这里已经有答案了 我想声明一个变量 其名称来自另一个变量的值 我编写了以下代码 a bbb a ccc 但没有成功 完成这项工作的正确方法是什么 eval用于此目的 但如果您天真地这样做 将会出现令人讨厌的转义问题 这种事情通常是
  • 地址窗口扩展

    我有一个 32 位应用程序 需要非常大的内存 我注意到有一种东西叫做地址窗口扩展 http msdn microsoft com en us library aa366527 28v vs 85 29 aspx 然而 我还没有找到太多关于如
  • Django:将整个模型对象集转换为单个字典

    如果您从 Google 来到这里寻找听写模型 请跳过我的问题 直接跳到第一个答案 我的问题只会让你感到困惑 Django 中有没有一种好方法可以将整个模型对象集放入单个字典中 我的意思是 像这样 class DictModel models
  • 您可以使用多个过滤器调用 Directory.GetFiles() 吗?

    我正在尝试使用Directory GetFiles 方法来检索多种类型的文件列表 例如mp3 s and jpg的 我尝试过以下两种方法 但没有成功 Directory GetFiles C path mp3 jpg SearchOptio
  • asterisk agi (php) 文件调试

    有谁知道调试 asterisk 的 agi secript a2billing php 所需的步骤 如果我从 Linux 控制台调用 php cli 我就可以远程调试它 但如果它从 asterisk 内部运行 则不起作用 知道如何调试它吗
  • 更改Fiddler根证书以成功解密HTTPS

    有没有办法更改Fiddler的根证书 当客户端应用程序使用证书固定并且我可以访问密钥库 其证书受到客户端应用程序信任 时 我希望使用它 我想你是在问 我可以更改 Fiddler 用于特定站点的证书吗 而不是root证书 用于所有站点 是的
  • 为什么使用 std::make_* 而不是构造函数更好?

    STL中有一些函数以make 前缀如std make pair std make shared std make unique等等 为什么使用它们而不是简单地使用构造函数是更好的做法 auto pair2 std pair lt int d
  • 添加 VPC 配置后调用 lambda 超时

    我正在使用无服务器框架来创建 lambda 我创建了一个简单的 Lambda 函数 它从 Mongo 实例进行查询并返回响应 最初 我使用 publicIp 创建了 Mongo 实例 并让 Lambda 使用 publicIP 访问该实例
  • 在 mysql 脚本中静默“Query OK 0 row受影响”输出

    我有一个创建多个存储过程的 MySQL 脚本 我想让大家沉默 Query OK 0 rows affected 0 00 sec 当我运行时出现的消息 source MY SCRIPT sql 它变成了一个很长的列表 我有时会忘记在开发过程
  • Visual Studio 2010 中的 Microsoft 图表控件?

    这可能吗 我安装了它们 但它们没有出现 我必须导入它们还是什么 如果在工具箱中看不到 Chart 控件 请右键单击工具箱 选择 选择项 然后在 NET Framework 组件 选项卡中选择以下命名空间 System Web UI Data
  • 设置带有子包的 python 包的正确方法

    我正在尝试在 python 中设置一个带有子包的包 这是我目前拥有的树结构 myPackage init py mySubPackage1 foo2 py foo py init py mySubPackage2 bar2 py bar p
  • Android SQLiteOpenHelper - 每个表都有不同的类?

    我正在读这篇文章 http www vogella com tutorials AndroidSQLite article html http www vogella com tutorials AndroidSQLite article
  • 像 TinyPNG 这样的图像优化 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我在 Google 上搜索过一个好的 Mass Image Optimizer 可以在 Windows
  • 如何从 Android 中的菜单项调用 Activity?

    我试图通过单击菜单按钮来调用 startActivity myIntent 但我的应用程序此时崩溃了 通过常规按钮单击 相同的 startActivity 调用可以正常工作 因此 我认为菜单按钮缺少有关上下文的信息 或者也许我在这里完全偏离
  • 将 jQueryUI 可排序列表与表单一起使用

    我正在使用 jQueryUI 创建一个可排序列表 并且 UI 部分工作得很好 因为我可以根据需要在网页上对项目进行排序 但我不知道排序列表的顺序是如何包含在 POST 中的 我对 javascript 完全是菜鸟 所以如果这真的很简单 请原
  • TimeSpan 转 ISO8601 持续时间格式字符串

    任何人都可以建议如何将时间跨度或整数转换为 ISO8601 持续时间字符串 如中所述http en wikipedia org wiki ISO 8601 Durations http en wikipedia org wiki ISO 8
  • WPF 验证器类似于 ASP.NET 中的验证器

    我们如何在 WPF 应用程序中实现类似于 ASP NET 应用程序的验证器 如必填字段验证器 提前致谢 None
  • 如何在 Cypress e2e 测试中使用 Angular Store

    我需要在我的 Angular Store 中注入一个值 调度一个操作 以使我的 Cypress e2e 测试正常工作 事实上 我需要我的商店包含 isLoggedIn true 来访问应用程序中的任何页面 否则用户将被重定向到登录页面 我在