Test Driven Development (TDD)
and Continuous Integration
![](https://wiki.jenkins.io/download/attachments/2916393/logo.png?version=1&modificationDate=1302753947000&api=v2)
![](https://msdnshared.blob.core.windows.net/media/2017/10/docker.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/903700/images/5091888/download.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/903700/images/5091903/logo_uol.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/903700/images/5091903/logo_uol.png)
Teste unitário no front-end
![](https://s3.amazonaws.com/media-p.slid.es/uploads/903700/images/5091888/download.png)
![](http://www.chaijs.com/img/chai-logo-small.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/903700/images/5091903/logo_uol.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/903700/images/5091888/download.png)
![](http://www.chaijs.com/img/chai-logo-small.png)
- Comece pelo teste
- Faça falhar
- Refatore
![](https://s3.amazonaws.com/media-p.slid.es/uploads/903700/images/5091903/logo_uol.png)
Exemplos
![](https://s3.amazonaws.com/media-p.slid.es/uploads/903700/images/5091903/logo_uol.png)
import { expect } from 'chai'
import { request } from 'supertest'
const mainUrl = 'http://painel-wifi.com/'
describe('Painel Admin Wi-fi', () => {
it('Should /json returns sucess 200', (done) => {
request(mainUrl)
.get('/json')
.expect(200)
.end(function(err){
done(err)
})
})
})
app.spec.js
![](https://s3.amazonaws.com/media-p.slid.es/uploads/903700/images/5091903/logo_uol.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/903700/images/5091938/fail-test.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/903700/images/5091903/logo_uol.png)
Crie scripts no seu package.json para
fazer build e rodar testes localmente
"scripts": {
"ng": "./node_modules/.bin/ng",
"pm2": "./node_modules/.bin/pm2",
"mocha": "./node_modules/.bin/mocha specs/**/*.spec.js",
"serve": "npm run ng serve",
"build": "rm -rf dist && npm run ng build",
"test": "npm run mocha",
"local:test": "npm run test --env=local",
"local:start": "npm run pm2 --env=local start app.js --update-env",
"local:stop": "npm run pm2 delete app.js",
"prepush": "npm run build && npm run local:start
&& npm run local:test && npm run local:stop"
}
package.json
![](https://s3.amazonaws.com/media-p.slid.es/uploads/903700/images/5091903/logo_uol.png)
import { expect } from 'chai'
import { API_URL } from '../source/config'
describe('Smoke test', () => {
it('Should create an instace of myFunction', (done) => {
const myVar = new myFunction({});
expect(myVar).to.be.an.instanceOf(myFunction)
})
})
app.spec.js
![](https://s3.amazonaws.com/media-p.slid.es/uploads/903700/images/5091903/logo_uol.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/903700/images/5092002/pass-test2.png)
Exemplo de teste passando =)
![](https://media1.giphy.com/media/JpKv5m3OfJRtu/giphy.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/903700/images/5091903/logo_uol.png)
Continuous Integration - Jenkins
![](https://wiki.jenkins.io/download/attachments/2916393/logo.png?version=1&modificationDate=1302753947000&api=v2)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/903700/images/5091903/logo_uol.png)
FROM jenkins
USER root
RUN curl -sL https://deb.nodesource.com/setup_8.x | bash - \
&& apt-get install -y nodejs
RUN npm install -g npm
USER jenkins
Dockerfile
Instalação e Configuração
![](https://msdnshared.blob.core.windows.net/media/2017/10/docker.png)
Criando imagem Jenkins com o Docker
![](https://s3.amazonaws.com/media-p.slid.es/uploads/903700/images/5091903/logo_uol.png)
Instalação e Configuração
![](https://msdnshared.blob.core.windows.net/media/2017/10/docker.png)
Criando imagem Jenkins com o Docker
docker image build -t myDenkinsImage:1.0.0 .
docker container run -p 8080:8080 myDenkinsImage:1.0.0
Terminal
![](https://s3.amazonaws.com/media-p.slid.es/uploads/903700/images/5091903/logo_uol.png)
http://localhost:8080
![](https://s3.amazonaws.com/media-p.slid.es/uploads/903700/images/5104275/new-item-jenkins.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/903700/images/5091903/logo_uol.png)
http://localhost:8080
![](https://s3.amazonaws.com/media-p.slid.es/uploads/903700/images/5104276/new-item-create.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/903700/images/5091903/logo_uol.png)
http://localhost:8080
![](https://s3.amazonaws.com/media-p.slid.es/uploads/903700/images/5092048/jenkins-local.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/903700/images/5091903/logo_uol.png)
Jenkinsfile
![](https://wiki.jenkins.io/download/attachments/2916393/logo.png?version=1&modificationDate=1302753947000&api=v2)
Pipeline Jenkins
pipeline {
agent any
stages {
stage('Checkout') {
steps {
deleteDir()
checkout scm
}
}
stage('Build') {
steps {
script {
sh 'npm install'
commitChanges()
}
}
}
stage('Unit Test') {
steps {
script {
sh 'npm test'
}
}
}
}
}
- Instala as dependencias
- Executa o teste
![](https://s3.amazonaws.com/media-p.slid.es/uploads/903700/images/5091903/logo_uol.png)
![](https://wiki.jenkins.io/download/attachments/2916393/logo.png?version=1&modificationDate=1302753947000&api=v2)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/903700/images/5099845/jenkins-working.png)
Pipeline Jenkins
![](https://s3.amazonaws.com/media-p.slid.es/uploads/903700/images/5091903/logo_uol.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/903700/images/5104287/logs.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/903700/images/5104286/console-jenkins.png)
Isso é tudo pessoal!
![](https://media3.giphy.com/media/91ta2GV0ty48/giphy.gif)
Test Driven Development
By Bruno Macedo
Test Driven Development
- 385