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);
})