mirror of
				https://github.com/invoiceninja/invoiceninja.git
				synced 2025-10-30 23:57:33 -04:00 
			
		
		
		
	* Install Cypress * Fix npm vulnerabilities * scaffold cypress * ignore local tests * login page test * invoices tests * recurring invoices * payments tests * payment methods tests * update invoices & quotes * credits tests
		
			
				
	
	
		
			169 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
			Vendored
		
	
	
	
			
		
		
	
	
			169 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
			Vendored
		
	
	
	
| /// <reference types="cypress" />
 | ||
| 
 | ||
| context('Assertions', () => {
 | ||
|   beforeEach(() => {
 | ||
|     cy.visit('https://example.cypress.io/commands/assertions')
 | ||
|   })
 | ||
| 
 | ||
|   describe('Implicit Assertions', () => {
 | ||
|     it('.should() - make an assertion about the current subject', () => {
 | ||
|       // https://on.cypress.io/should
 | ||
|       cy.get('.assertion-table')
 | ||
|         .find('tbody tr:last')
 | ||
|         .should('have.class', 'success')
 | ||
|         .find('td')
 | ||
|         .first()
 | ||
|         // checking the text of the <td> element in various ways
 | ||
|         .should('have.text', 'Column content')
 | ||
|         .should('contain', 'Column content')
 | ||
|         .should('have.html', 'Column content')
 | ||
|         // chai-jquery uses "is()" to check if element matches selector
 | ||
|         .should('match', 'td')
 | ||
|         // to match text content against a regular expression
 | ||
|         // first need to invoke jQuery method text()
 | ||
|         // and then match using regular expression
 | ||
|         .invoke('text')
 | ||
|         .should('match', /column content/i)
 | ||
| 
 | ||
|       // a better way to check element's text content against a regular expression
 | ||
|       // is to use "cy.contains"
 | ||
|       // https://on.cypress.io/contains
 | ||
|       cy.get('.assertion-table')
 | ||
|         .find('tbody tr:last')
 | ||
|         // finds first <td> element with text content matching regular expression
 | ||
|         .contains('td', /column content/i)
 | ||
|         .should('be.visible')
 | ||
| 
 | ||
|       // for more information about asserting element's text
 | ||
|       // see https://on.cypress.io/using-cypress-faq#How-do-I-get-an-element’s-text-contents
 | ||
|     })
 | ||
| 
 | ||
|     it('.and() - chain multiple assertions together', () => {
 | ||
|       // https://on.cypress.io/and
 | ||
|       cy.get('.assertions-link')
 | ||
|         .should('have.class', 'active')
 | ||
|         .and('have.attr', 'href')
 | ||
|         .and('include', 'cypress.io')
 | ||
|     })
 | ||
|   })
 | ||
| 
 | ||
|   describe('Explicit Assertions', () => {
 | ||
|     // https://on.cypress.io/assertions
 | ||
|     it('expect - make an assertion about a specified subject', () => {
 | ||
|       // We can use Chai's BDD style assertions
 | ||
|       expect(true).to.be.true
 | ||
|       const o = { foo: 'bar' }
 | ||
| 
 | ||
|       expect(o).to.equal(o)
 | ||
|       expect(o).to.deep.equal({ foo: 'bar' })
 | ||
|       // matching text using regular expression
 | ||
|       expect('FooBar').to.match(/bar$/i)
 | ||
|     })
 | ||
| 
 | ||
|     it('pass your own callback function to should()', () => {
 | ||
|       // Pass a function to should that can have any number
 | ||
|       // of explicit assertions within it.
 | ||
|       // The ".should(cb)" function will be retried
 | ||
|       // automatically until it passes all your explicit assertions or times out.
 | ||
|       cy.get('.assertions-p')
 | ||
|         .find('p')
 | ||
|         .should(($p) => {
 | ||
|           // https://on.cypress.io/$
 | ||
|           // return an array of texts from all of the p's
 | ||
|           // @ts-ignore TS6133 unused variable
 | ||
|           const texts = $p.map((i, el) => Cypress.$(el).text())
 | ||
| 
 | ||
|           // jquery map returns jquery object
 | ||
|           // and .get() convert this to simple array
 | ||
|           const paragraphs = texts.get()
 | ||
| 
 | ||
|           // array should have length of 3
 | ||
|           expect(paragraphs, 'has 3 paragraphs').to.have.length(3)
 | ||
| 
 | ||
|           // use second argument to expect(...) to provide clear
 | ||
|           // message with each assertion
 | ||
|           expect(paragraphs, 'has expected text in each paragraph').to.deep.eq([
 | ||
|             'Some text from first p',
 | ||
|             'More text from second p',
 | ||
|             'And even more text from third p',
 | ||
|           ])
 | ||
|         })
 | ||
|     })
 | ||
| 
 | ||
|     it('finds element by class name regex', () => {
 | ||
|       cy.get('.docs-header')
 | ||
|         .find('div')
 | ||
|         // .should(cb) callback function will be retried
 | ||
|         .should(($div) => {
 | ||
|           expect($div).to.have.length(1)
 | ||
| 
 | ||
|           const className = $div[0].className
 | ||
| 
 | ||
|           expect(className).to.match(/heading-/)
 | ||
|         })
 | ||
|         // .then(cb) callback is not retried,
 | ||
|         // it either passes or fails
 | ||
|         .then(($div) => {
 | ||
|           expect($div, 'text content').to.have.text('Introduction')
 | ||
|         })
 | ||
|     })
 | ||
| 
 | ||
|     it('can throw any error', () => {
 | ||
|       cy.get('.docs-header')
 | ||
|         .find('div')
 | ||
|         .should(($div) => {
 | ||
|           if ($div.length !== 1) {
 | ||
|             // you can throw your own errors
 | ||
|             throw new Error('Did not find 1 element')
 | ||
|           }
 | ||
| 
 | ||
|           const className = $div[0].className
 | ||
| 
 | ||
|           if (!className.match(/heading-/)) {
 | ||
|             throw new Error(`Could not find class "heading-" in ${className}`)
 | ||
|           }
 | ||
|         })
 | ||
|     })
 | ||
| 
 | ||
|     it('matches unknown text between two elements', () => {
 | ||
|       /**
 | ||
|        * Text from the first element.
 | ||
|        * @type {string}
 | ||
|       */
 | ||
|       let text
 | ||
| 
 | ||
|       /**
 | ||
|        * Normalizes passed text,
 | ||
|        * useful before comparing text with spaces and different capitalization.
 | ||
|        * @param {string} s Text to normalize
 | ||
|       */
 | ||
|       const normalizeText = (s) => s.replace(/\s/g, '').toLowerCase()
 | ||
| 
 | ||
|       cy.get('.two-elements')
 | ||
|         .find('.first')
 | ||
|         .then(($first) => {
 | ||
|           // save text from the first element
 | ||
|           text = normalizeText($first.text())
 | ||
|         })
 | ||
| 
 | ||
|       cy.get('.two-elements')
 | ||
|         .find('.second')
 | ||
|         .should(($div) => {
 | ||
|           // we can massage text before comparing
 | ||
|           const secondText = normalizeText($div.text())
 | ||
| 
 | ||
|           expect(secondText, 'second text').to.equal(text)
 | ||
|         })
 | ||
|     })
 | ||
| 
 | ||
|     it('assert - assert shape of an object', () => {
 | ||
|       const person = {
 | ||
|         name: 'Joe',
 | ||
|         age: 20,
 | ||
|       }
 | ||
| 
 | ||
|       assert.isObject(person, 'value is object')
 | ||
|     })
 | ||
|   })
 | ||
| })
 |