/// context('Spies, Stubs, and Clock', () => { it('cy.spy() - wrap a method in a spy', () => { // https://on.cypress.io/spy cy.visit('https://example.cypress.io/commands/spies-stubs-clocks'); const obj = { foo() {}, }; const spy = cy.spy(obj, 'foo').as('anyArgs'); obj.foo(); expect(spy).to.be.called; }); it('cy.spy() retries until assertions pass', () => { cy.visit('https://example.cypress.io/commands/spies-stubs-clocks'); const obj = { /** * Prints the argument passed * * @param x {any} */ foo(x) { console.log('obj.foo called with', x); }, }; cy.spy(obj, 'foo').as('foo'); setTimeout(() => { obj.foo('first'); }, 500); setTimeout(() => { obj.foo('second'); }, 2500); cy.get('@foo').should('have.been.calledTwice'); }); it('cy.stub() - create a stub and/or replace a function with stub', () => { // https://on.cypress.io/stub cy.visit('https://example.cypress.io/commands/spies-stubs-clocks'); const obj = { /** * Prints both arguments to the console * * @param a {string} * @param b {string} */ foo(a, b) { console.log('a', a, 'b', b); }, }; const stub = cy.stub(obj, 'foo').as('foo'); obj.foo('foo', 'bar'); expect(stub).to.be.called; }); it('cy.clock() - control time in the browser', () => { // https://on.cypress.io/clock // create the date in UTC so its always the same // no matter what local timezone the browser is running in const now = new Date(Date.UTC(2017, 2, 14)).getTime(); cy.clock(now); cy.visit('https://example.cypress.io/commands/spies-stubs-clocks'); cy.get('#clock-div').click().should('have.text', '1489449600'); }); it('cy.tick() - move time in the browser', () => { // https://on.cypress.io/tick // create the date in UTC so its always the same // no matter what local timezone the browser is running in const now = new Date(Date.UTC(2017, 2, 14)).getTime(); cy.clock(now); cy.visit('https://example.cypress.io/commands/spies-stubs-clocks'); cy.get('#tick-div').click().should('have.text', '1489449600'); cy.tick(10000); // 10 seconds passed cy.get('#tick-div').click().should('have.text', '1489449610'); }); });