如何在 cypress 中设置本地存储

Posted

技术标签:

【中文标题】如何在 cypress 中设置本地存储【英文标题】:How to set local storage in cypress 【发布时间】:2021-06-28 00:57:42 【问题描述】:

我有一个简单的测试

describe('Page Test', () => 
  it('button has "contact-next-disabled" class', () => 
    cy.get('.contact-next-disabled')
  )
)

但是运行测试后,cypress 报错

  34 | useEffect(() => 
  35 |   const _contact = getLocalStorage()
> 36 |   if (!_contact.categories.length && !_contact.categoryNameEtc) 
     |                ^
  37 |     PGToaster.showDanger('Please select a category.')
  38 |     router.push('/contact/a-type')
  39 |   

我的 getLocalStorage 函数位于与我正在测试的文件不同的文件中

export const getLocalStorage = () => 
  const contact = JSON.parse(window.localStorage.getItem('contact'))
  return contact

与我的setLocalStorage 函数一起使用

export const setLocalStorage = (contact) => 
  const _contact = getLocalStorage()
  const updateContact = 
    ..._contact,
    ...contact
  
  window.localStorage.setItem('contact', JSON.stringify(updateContact))

如果我重写

if (!_contact.categories.length && !_contact.categoryNameEtc)

if (!_contact?.categories.length && !_contact?.categoryNameEtc)

错误消失了,但我只想在我的 cypress 测试中设置本地存储,而不是重写我的代码。我该怎么做?

【问题讨论】:

【参考方案1】:

根据cy.clearLocalStorage()的文档

赛普拉斯会在每次测试之前自动运行此命令,以防止在测试之间共享状态。除非您在单个测试中使用它来清除 localStorage,否则您不需要使用此命令。

您可以使用hooks 设置您的测试:

before(() => 
  // set localStorage
)

或者您可以使用像 cypress-localstorage-commands 这样的插件来保留赛普拉斯测试之间的 localStorage。

【讨论】:

以上是关于如何在 cypress 中设置本地存储的主要内容,如果未能解决你的问题,请参考以下文章

如何在 cpanel 中设置 phpmyadmin 配置存储

将数据保存到本地存储

使用 angularjs 观察本地存储

如何在 iPhone 中设置 iCloud Root?

如何在 git-svn 中设置上游分支?

将数据附加到本地存储问题