从 cypress 写入 Svelte 可写存储值

2023-12-11

在 Svelte 应用程序中,我有一个布尔变量。

import { writable } from 'svelte/store'
export const authorised = writable(false)

这将导入到 App.svelte 和其他 svelte 文件中,并使用 $authorized 进行访问和更新。

我无法在 Cypress 中使用 $ 语法,所以我使用了

import { authorised } from '../../src/stores'
describe( etc etc
        authorised.set(true)
        cy.visit(`/`)

在 App.svelte 中,我有一个 console.log 显示 $authorized 的值。

在cypress浏览器输出中使用开发工具,授权显示为false。

测试通过后端 api 登录,在正文响应中接收令牌和用户 ID。使用这些数据,我在 svelte 商店中设置了各种值(包括授权),以便在访问应用程序时,它应该显示授权屏幕而不是登录屏幕。

那么为什么 svelte store 中没有设置授权呢?

Updated:

使用 Fody 的方法,我在脚本之外添加到 App.svelte 的开头,

declare global {
  interface Window {
    Cypress?: Cypress.Cypress;
  }
}

将其放入脚本中会在声明时出现错误。但是上面的代码,在界面上给出了错误。

关键字“interface”被保留

我看过解析错误:关键字“interface”被保留正在安装 ts-standard 并更新 package.json。但安装需要很长时间。

我应该安装 ts-standard 吗?

进一步更新:

在 main.ts 中,我添加了

import type { Writable } from 'svelte/store';    
declare global {
        interface Window {
          Cypress?: Cypress.Cypress
          authorised?: Writable<boolean>
        }
    }

在 App.svelte 中。

  if (window.Cypress) {
    window.authorised.set($authorised)          
  }

最后在 test.js 文件中

.its('body').then((body) => {
        cy.log(body)
        cy.visit(`/`)
        cy.window().then(win => win.authorised.set(true))

运行测试显示“windows.authorized is undefined”错误,控制台日志为 未捕获的类型错误:window.authorized 未定义 实例App.svelte:16 初始化索引.mjs:1891 应用程序包.js:4033 应用程序 main.ts:14 捆绑.js:4050

其中 App.svelte:16 是“window.authorized.set($authorized) ”


如果您直接导入可写存储,它不会使用与应用程序中的实例相同的实例。

但您可以将其作为属性附加window允许 Cypress 访问同一实例。

一个最小的例子:

精简的应用程序

<script>
  import { writable } from 'svelte/store'

  export const authorised = writable(false)

  if (window.Cypress) {
    window.authorised = authorised;          // only if Cypress is running
  }

  let authorisedValue;
  authorised.subscribe(value => {
    authorisedValue = value;
  });
</script>

<main>
  <div id="app-container" class="app-container">
    <div id="authorised-display-value">{authorisedValue}</div>
  </div>
</main>

Test

it('passes', () => {
  cy.visit('http://localhost:8080/')
  cy.get('#authorised-display-value').should('contain', 'false')    // passes
  cy.window().then(win => win.authorised.set(true))
  cy.get('#authorised-display-value').should('contain', 'true')     // passes
})

打字稿支持

如果项目是基于打字稿的,window.Cypress and window.authorised参考文献会产生问题。

定义这些在main.ts.

对于我的最小应用程序:

import type { Writable } from 'svelte/store';
import App from './App.svelte';

declare global {
  interface Window {
    Cypress?: Cypress.Cypress;
    authorised?: Writable<Boolean>;
  }
}

const app = new App({
    target: document.body
});

export default app;

将通用参数添加到可写存储也是一个很好的做法。

In App.svelte:

<script lang="ts">
  import { writable } from 'svelte/store'
  export const authorised = writable<Boolean>(false)
  ...

最后,定义全局类型导入global.d.ts:

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

从 cypress 写入 Svelte 可写存储值 的相关文章

随机推荐

  • UITextView 或 UILabel Swift 上图像的自定义项目符号

    我正在创建一个应用程序 它基本上是一个大型网站的移动版本 该网站有一个特定区域列出了产品功能 每个功能都标有独特的自定义图像 有没有办法快速做到这一点 本质上 创建一个字符串项目符号列表 但使用小图像作为项目符号点 将 UITextView
  • 如何插入重新启动游戏选项?

    我希望在骰子游戏结束时有一个选项 上面写着 您想重新启动吗 是还是不是 如果用户输入 是 游戏就会重新启动 并且会无限次 直到用户玩够游戏并退出 我知道你可以用循环来做到这一点 但是怎么做呢 import random print Dice
  • Java程序如何获得自己的进程ID?

    如何获取我的 Java 进程的 ID 我知道有几种依赖于平台的技巧 但我更喜欢更通用的解决方案 不存在可以保证在所有 jvm 实现中工作的独立于平台的方法 ManagementFactory getRuntimeMXBean getName
  • sed 就地编辑文件

    如何编辑文件single sed命令 目前 我必须手动将编辑的内容流式传输到新文件中 然后将新文件重命名为原始文件名 I tried sed i 但我的 Solaris 系统说 i是一个非法的选择 有不同的方法吗 The i option无
  • 推送不会修改作为函数参数的列表[重复]

    这个问题在这里已经有答案了 我是 common lisp 的新手 所以希望有人能向我澄清这一点 假设我们有一个列表并想要添加一个项目push修改它 CL USER gt defparameter xx 1 2 3 XX CL USER gt
  • PHP odbc_fetch_array 字符串限制

    我有以下sql SELECT bw imp step as imp action FROM cm3rm1 m1 INNER JOIN cm3rm2 m2 ON m1 number m2 number WHERE m1 number id 当
  • 如何使用 MLlib 在 Spark 上生成(原始标签、预测标签)的元组?

    我正在尝试使用从 Spark 上的 MLlib 返回的模型进行预测 目标是生成 orinalLabelInData predictedLabel 的元组 然后这些元组可以用于模型评估目的 实现这一目标的最佳方法是什么 谢谢 假设 parse
  • 如何获取用户位置?

    我试图使用以下代码获取用户的当前位置 但它不起作用 我已经添加了两个NSLocationWhenInUseUsageDescription钥匙和NSLocationAlwaysUsageDescription我的钥匙Info plist f
  • 如何在Windows窗体应用程序中实现键盘按键

    我想在 C Windows 窗体应用程序中实现键盘按钮按下命令 假设如果达到某个值 我想使用 Windows 窗体应用程序按下 L 键 这可能吗 怎么做 这可能对你有用 但是 更好的方法可能是设置表单的KeyPreview财产给true 然
  • Apache Kafka JDBC 连接器 - SerializationException:未知的魔术字节

    我们尝试使用 Confluence JDBC Sink Connector 将主题中的值写回到 postgres 数据库 connector class io confluent connect jdbc JdbcSinkConnector
  • 如何阻止 Java 自动将 char 值转换为 int?

    java编译器自动将char值转换为int 这样的代码不会引发错误 public void foo int i do something char c a foo c 有没有办法阻止编译器总是将 chars 转换为 int 或抛出错误 默认
  • 为什么我会收到此代码的“wait_fences:未能收到回复”?

    为什么我会收到此代码的 wait fences 未能收到回复 这是我使用通知与主线程通信的方式吗 import ViewController h implementation ViewController synthesize alert
  • 如果其他选择发生变化,AngularJS 会删除并添加选择框选项

    我正在寻找类似的解决方案problem之前已经用以下代码解决了这个问题 http jsfiddle net yLCVf 1 这是我需要从上面的 JSFiddle 使用的 JS document ready function select h
  • 将文本字段限制为一位小数点输入,仅限数字,小数点后两位字符 - Swift 3

    我正在努力使用 Swift 3 来做到这一点 我有一个文本字段 我想将其限制为仅包含数字和一个小数点以及小数点后两个字符 我还想让它在输入非整数时不使用小数点的区域中工作 感谢您的任何建议 您需要将委托分配给文本字段 并在 shouldCh
  • JavaFX 中的切换按钮和侦听器

    我有这个代码 FXML private ToggleButton tb1 FXML private ToggleButton tb2 FXML ToggleGroup group new ToggleGroup String cpuLoad
  • Elixir [42] 打印为“*”

    我有一个返回的角色模型列表p followings我想提取followed id将此模型列表中的字段放入单独的列表中 p followings returns Poaster Personas Following meta Ecto Sch
  • Swift 2 无法使用类型的参数列表调用“FSEventStreamCreate”

    使用 Swift 2 和 Xcode 7 beta 2 内部版本 7A121l 我使用 FSEventStream API 和 convention c 收到此编译错误 任何建议都会很棒 谢谢 internal class FileSyst
  • 在javafx 2.0中加载SVG文件

    我想在 javafx 2 0 中显示 svg 图像 但我在 API 中没有找到这样的东西 我想这是因为它仍处于测试阶段 在最终版本发布之前 如何加载 svg 是否已经有一个库可以处理这个问题 或者我是否需要自己解析文件 然后创建相应的形状
  • 在 Cypress 测试 Vue.js 应用程序期间禁用 Ag Grid 虚拟化

    如何在 Vue js 应用程序的 Cypress 测试期间禁用 Ag Grid 的虚拟化 由于 Ag 网格不会一次绘制所有内容 因此我必须模拟滚动来验证网格中的数据 网格行为等 这使得我的 Cypress Mocha 测试变得很麻烦 如果我
  • 从 cypress 写入 Svelte 可写存储值

    在 Svelte 应用程序中 我有一个布尔变量 import writable from svelte store export const authorised writable false 这将导入到 App svelte 和其他 sv