Trabalhando com
assertions

O que é um assertion?

São a parte do teste que asseguram que algo é algo

exemplo:

const planet = new Planet('Earth')

expect(planet).to.be.rounded

E são bem melhores do que fazer a comparação na mão

const earth = new Planet('Earth')

rounded(planet) {
  return planet.mass > 3000000 && (planet.mass / planet.volume) > '?'
}

Assertions normalmente já vem com o seu framework de test

O problema disso é que muitas vezes isto é insuficiente

import {expect} from 'framework'
import {assertionSomethingSpecial as special1} from 'special' 
import {crazyThing as motherfucker} from 'special2' 

it(function() {
  const obj = new Object()
  expect(obj).toExists()
  obj.special1.something
  motherfucker(obj, {lero: true})
}}

e de novo temos uma bagunça

nós precisamos de uma assertion

legível

flexível

*no mundo Javascript

3 tipos de assertion

- should

- expect

- assert

assert

recebe como argumento, e compara

import assert from 'chai'

const variable = false
assert.isTrue(variable)

// or

assert.equal(variable, true)

Desvantagem

não é encadeável

should

é encadeável

import should from 'chai'

const variable = false
variable.should.to.be.true

// or

variable.should.to.be(true)

Desvantagem

add o método should ao elemento testado

expect

é encadeável

import expect from 'chai'

const variable = false

expect(variable).to.be.true

// or

expect(variable).to.be(true)

e é função externa, não altera o elemento

chainables (encadeamentos)

tem vários

.to

.be

.been

.is

.that

.which

.some

.deep

.any

.all

.include

.exist

.empty

.equal

.deepEqual

.ownProperty

procura na documentação porr4

Plugins

Precisando testar algo e o chai não tem isso?

então use um plugin

ou faça um

plugin de assertions para array

adiciona .something e .all

const variable = [{ a: 'cat' }, { a: 'dog' }]

expect(variable).to.include.something.that.deep.equals({ a: 'cat' })
const variable = [{ a: 'cat' }, { a: 'dog' }]

expect(variable).to.all.have.property('a')

plugin de assertions o DOM

adiciona .attr, .class, .html, ...

const header = document.getElementById('header')
const article = document.querySelector('main article')

expect(headewr).to.have.attr('foo')
expect(article).to.have.attribute('foo', 'bar')

plugin para testes de integração
com HTTP

adiciona .request, .get, .post, ...

import request from 'chai-http'
const app = 'localhost:3000' // or an instance of service

request(app)
  .put('/user/me')
  .send({ password: '123', confirmPassword: '123' })
  .end(function (err, res) {
     expect(err).to.be.null;
     expect(res).to.have.status(200);
  })
Made with Slides.com