使用赛普拉斯时,为什么需要明确清除sessionStorage?

时间:2018-06-07 18:00:29

标签: angular session-storage cypress

我正在使用赛普拉斯测试一个Angular应用程序,该应用程序通过医生列表进行分页。控制器将当前页面存储在$ sessionStorage.pagination中。如果我没有明确清除测试之间的会话存储,那么遵循我的“应该转到下一页”测试的测试将失败。如果我明确清除测试之间的会话存储,一切都按预期工作。这与我在此处阅读的内容(https://github.com/cypress-io/cypress/issues/686)相矛盾,这似乎表明会话存储在测试之间自动清除。

这是赛普拉斯的一个错误吗?或者,我是否通过在测试之间清除会话存储而误解赛普拉斯开发人员的意思?

describe('Simple Search Results Page Tests', function () {

    beforeEach(function(){
      cy.server();

    // routes omitted for brevity 

    // Changing pages breaks tests if I visit page under test like this
    cy.visit('http://localhost:9001/pageUnderTest'); 

    // tests work as expected if I visit page under test like this
    /*
    cy.visit('http://localhost:9001/pageUnderTest', 
              {onBeforeLoad: (win) => { win.sessionStorage.clear()}
    });
    /*
  }); 

  it('should search Best Match', function(){
    cy.get('[data-cy=first-name]').first().should('have.text', 'Michael')
      .get('[data-cy=last-name]').first().should('have.text', 'Emiley')
    });

  it('should go to the next page', function(){
    cy.get('[data-cy="page-number"]').click('right')
  }); 

  // this test is broken if session storage not explicitly re-set.
  it('should search Best Match (again)', function(){
    cy.get('[data-cy=first-name]').first().should('have.text', 'Michael')
      .get('[data-cy=last-name]').first().should('have.text', 'Emiley')
    });
});

2 个答案:

答案 0 :(得分:1)

open gitlab issue似乎与您的问题相符,并确认它是您要求的功能。

尽管阅读this epic is mentioned,其中指出赛普拉斯确实清楚sessionStorage。所以我也有点迷失了:)

答案 1 :(得分:0)

您尝试使用上下文吗?

context('test 1', function () { cy.setCookie('test') })
context('test 2', function () { cy.getCookie('test').should('not.exist' })

它存在吗?