赛普拉斯测试 - 将本地存储中的令牌与剪贴板中存储的令牌进行比较

Cypress testing - compare token from localStorage to token stored in clipboard

我有一个按钮可以将令牌从 localStorage 复制到剪贴板,我想将 localStorage 的令牌与剪贴板中的令牌进行比较,以检查令牌是否被正确复制。

我的代码:

cy.get('.copy-to-clipboard').click();
cy.window().its('navigator.clipboard').invoke('readText')
  .should('equal', localStorage.getItem(accessTokenKey));

这是我唯一的想法,它有问题并且没有比较正确的值。

不幸的是,Cypress 还没有原生 copy/paste 支持,但有一些解决方法,例如:

1.第一条建议

cy.window().then((win) => {
    win.navigator.clipboard.readText().then((text) => {
        expect(text).to.eq('your copied text');
    });
});

2。第二个建议:

cy.window().its('navigator.clipboard')
  .invoke('readText').should('equal', 'copied text')

3。第三个建议,使用依赖clipboardy

首先安装依赖:`npm i -D clipboardy``

在你的 plugins/index.js 文件中输入:

const clipboardy = require('clipboardy');
module.exports = ( on ) => {
    on('task', {
        getClipboard () {
            return clipboardy.readSync();
        }
    });
};

然后在你的测试中使用: cy.task('getClipboard').should('contain', 'test');

也许同步和异步代码的混合是问题所在。

修复尝试

cy.get('.copy-to-clipboard')
  .click()
  .then(() => {  // defer until click finishes
    cy.window().its('navigator.clipboard').invoke('readText')  
      .should('equal', localStorage.getItem(accessTokenKey))
  })

或使.should()重试

cy.get('.copy-to-clipboard').click()

const accessTokenKey = localStorage.getItem(accessTokenKey)
cy.window().then(win => {
  cy.wrap(win.navigator.clipboard.readText())  // on retry repeat readText
    .should('equal', accessTokenKey)
})