text: /// <reference types="Cypress" />
  
  context("Connectors", () => {
    beforeEach(() => {
      cy.visit("https://example.cypress.io/commands/connectors")
    })
  
    it(".each() - iterate over an array of elements", () => {
      // https://on.cypress.io/each
      cy.get(".connectors-each-ul>li").each(($el, index, $list) => {
        console.log($el, index, $list)
      })
    })
  
    it(".its() - get properties on the current subject", () => {
      // https://on.cypress.io/its
      cy.get(".connectors-its-ul>li")
        // calls the 'length' property yielding that value
        .its("length")
        .should("be.gt", 2)
    })
  
    it(".invoke() - invoke a function on the current subject", () => {
      // our div is hidden in our script.js
      // $('.connectors-div').hide()
  
      // https://on.cypress.io/invoke
      cy.get(".connectors-div")
        .should("be.hidden")
        // call the jquery method 'show' on the 'div.container'
        .invoke("show")
        .should("be.visible")
    })
  
    it(".spread() - spread an array as individual args to callback function", () => {
      // https://on.cypress.io/spread
      const arr = ["foo", "bar", "baz"]
  
      cy.wrap(arr).spread((foo, bar, baz) => {
        expect(foo).to.eq("foo")
        expect(bar).to.eq("bar")
        expect(baz).to.eq("baz")
      })
    })
  
    describe(".then()", () => {
      it("invokes a callback function with the current subject", () => {
        // https://on.cypress.io/then
        cy.get(".connectors-list > li").then($lis => {
          expect($lis, "3 items").to.have.length(3)
          expect($lis.eq(0), "first item").to.contain("Walk the dog")
          expect($lis.eq(1), "second item").to.contain("Feed the cat")
          expect($lis.eq(2), "third item").to.contain("Write JavaScript")
        })
      })
  
      it("yields the returned value to the next command", () => {
        cy.wrap(1)
          .then(num => {
            expect(num).to.equal(1)
  
            return 2
          })
          .then(num => {
            expect(num).to.equal(2)
          })
      })
  
      it("yields the original subject without return", () => {
        cy.wrap(1)
          .then(num => {
            expect(num).to.equal(1)
            // note that nothing is returned from this callback
          })
          .then(num => {
            // this callback receives the original unchanged value 1
            expect(num).to.equal(1)
          })
      })
  
      it("yields the value yielded by the last Cypress command inside", () => {
        cy.wrap(1)
          .then(num => {
            expect(num).to.equal(1)
            // note how we run a Cypress command
            // the result yielded by this Cypress command
            // will be passed to the second ".then"
            cy.wrap(2)
          })
          .then(num => {
            // this callback receives the value yielded by "cy.wrap(2)"
            expect(num).to.equal(2)
          })
      })
    })
  })
  