Jasmine - Sinon - BrazilJS
Upcoming SlideShare
Loading in...5
×
 

Jasmine - Sinon - BrazilJS

on

  • 2,708 views

Lightning talk realizado no BrazilJS

Lightning talk realizado no BrazilJS

Statistics

Views

Total Views
2,708
Views on SlideShare
2,706
Embed Views
2

Actions

Likes
6
Downloads
33
Comments
0

1 Embed 2

https://www.linkedin.com 2

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • estrutura basica de uma suite do Jasminie
  • A ideia é ter varias spec’s dentro da suite.
  • podemos evitar repticoes de codigo com blocos beforeEach
  • before e after each serão uteis no fake server e fake timers
  • -> é legal falar que agrupar as descrição pode agrupar os BeforeEach...
  • existem outros -- dá uma olhada em como adicionar novos matchers https://github.com/pivotal/jasmine/wiki/Matchers
  • https://github.com/pivotal/jasmine/wiki/Spies Para garantir que uma sequencia de passos estah sendo executada. Pode ser bom para testar graficos ou apis que geram imagens. É dificil fazer um “assert” na imagem, mas com spies vc pode garantri que a sequencia de chamadas de metodos necessarias para criacao da imagem está sendo executada na ordem correta.
  • Para testar coisas assicronas, podemos usar runs e waits
  • Para testar coisas assicronas, podemos usar runs e waits
  • Para testar coisas assicronas, podemos usar runs e waits
  • Para testar coisas assicronas, podemos usar runs e waits
  • Para testar coisas assicronas, podemos usar runs e waits
  • Para testar coisas assicronas, podemos usar runs e waits
  • não vamos falar de stubs/mocks/spies no sinon.
  • entre IE e Chrome o tempo será diferente por questoes de performance.
  • entre IE e Chrome o tempo será diferente por questoes de performance.
  • sinon.spy é do sinon.

Jasmine - Sinon - BrazilJS Jasmine - Sinon - BrazilJS Presentation Transcript

  • Jasmine / Sinon.js Jorge Falcão Sergio Azevedo [email_address] @sergioazevedo
  • Jasmine
  • Jasmine
  • Jasmine
  • Jasmine
  • Jasmine
  • Jasmine / Spec //# ContaSpec.js # describe ('Conta', function (){ it ("deve realizar saques", function (){ var conta = new Conta({saldo:1000}); conta.saca(300) expect (conta.saldo()). toEqual (300); }); }); Spec Expectation Matcher
  • Jasmine / Spec describe ('Conta', function (){ it ("deve realizar saques", function (){ var conta = new Conta({saldo:1000}); conta.saca(300); expect (conta.saldo). toEqual (700); }); it ("deve permitir depositos", function (){ var conta = new Conta({saldo:1000}); conta.deposita(200); expect (conta.saldo). toEqual (1200); }); });
  • Jasmine / beforeEach describe('Conta', function() { it("deve realizar saques", function() { var conta = new Conta({ saldo: 1000 }); conta.saca(300); expect(conta.saldo).toEqual(700); }); it("deve permitir depositos", function() { var conta = new Conta({ saldo: 1000 }); conta.deposita(200); expect(conta.saldo).toEqual(1200); }); });
  • Jasmine / beforeEach describe('Conta', function() { var conta; beforeEach(function() { var conta = new Conta({ saldo: 1000 }); }); it("deve realizar saques", function() { conta.saca(300); expect(conta.saldo).toEqual(700); }); it("deve permitir depositos", function() { conta.deposita(200); expect(conta.saldo).toEqual(1200); }); }); afterEach() too!
  • Jasmine / Nested Spec describe('Conta', function() { var conta; describe('Conta Sem Bloqueio', function() { beforeEach(function() { conta = new Conta({ saldo: 1000 }); }); it("deve realizar saques", function() { ... }); }); describe('Conta Bloqueada', function() { beforeEach(function() { conta = new Conta({ saldo: 1000 }); conta.bloquear(); }); it("nao deve realizar saques", function() { ... }); }); });
  • Jasmine / Matchers expect (conta.saldo). toEqual (1000); expect (conta). toBe (conta); expect (conta.titular). toMatch (/ana/); expect (conta.saldo). toBeDefined() ; expect (conta.dataEncerramento). toBeNull () ; expect (conta.saca(-500). toThrow (Error) ; expect (conta.saldo). not .toEqual(40); expect (conta). not .toBe(“Mario”); ... É possível negar um Matcher. Também é possível criar seu próprio Matcher
  • Jasmine / Spies describe ('Banco', function (){ it ("deve taxar suas contas", function (){ var banco = new Banco(); var conta = new Conta(); banco.addConta(conta); spyOn (conta,'descontarTarifa'); banco.taxarContas(); expect (conta.descontarTarifa). toHaveBeenCalled (); }); });
  • Jasmine / Asynchronous specs describe ("Testes Assicronos", function ({ it ("exemplo com waits", function (){ var a = 1; setTimeout ( function (){ a++; console.debug("somando"); }, 300); expect (a). toEqual (2); }); });
  • Jasmine / Asynchronous specs
  • Jasmine / Asynchronous specs describe ("Testes Assicronos", function ({ it ("exemplo com waits", function (){ var a = 1; setTimeout ( function (){ a++; console.debug("somando"); }, 300); expect (a). toEqual (2); }); });
  • Jasmine / Asynchronous specs describe ("Testes Assicronos", function ({ it ("exemplo com waits", function (){ var a = 1; setTimeout ( function (){ a++; console.debug("somando"); }, 300); waits(300); runs(function() { expect(a).toEqual(2); }); expect (a). toEqual (2); }); });
  • Jasmine / Asynchronous specs
  • Jasmine / Asynchronous specs it("exemplo com waitsFor", function() { var a = 1; var somado = false; setTimeout(function() { a++; console.debug("somando"); somado = true; }, 1000); waitsFor(function() { return somado; }, "aguardando soma", 4000); runs(function() { expect(a).toEqual(2); }); });
  • Sinon.JS
  • Sinon.js
    • Spies
    • Stubs
    • Mocks
    • Fake Timers
    • Fake XHR
    • Fake Server
  • Sinon.js
  • Sinon.js/Fake Timers describe ("Sinon Examples", function (){ it ('FakeTimers', function (){ var data = new Date(); expect ( elapsedTime (myDate)). toEqual (2); }); }); Depende da velocidade do browser!
  • Sinon.js/Fake Timers describe ("Sinon Examples", function (){ it ('FakeTimers', function (){ var clock = sinon . UseFakeTimers (); var data = new Date(); clock. tick (2000); expect ( elapsedTime (myDate)). toEqual (2); clock. restore (); }); }); beforeEach e afterEach podem ser uteis.
  • Sinon.js/Fake Server describe('Sinon',function(){ var server; beforeEach(function() { var server = sinon.useFakeServer(); }); afterEach(function() { server.restore(); }); it("FakeServer example", function(){ server.respondWith('GET', '/users.json', [200, {"Content-Type" : "application/json"}, '[{id:1, login: "Jason"}]']); var callback = sinon.spy(); $.ajax({ url: '/users.json', success: callback }); assert( callback.calledWith([{id: 1, login: "Json"}]); ); }); });
  • Referências
    • JasmineBDD
      • http://pivotal.github.com/jasmine/
    • Sinon.js
      • http://sinonjs.org/
  • Obrigado [email_address] [email_address] intelie.com/trabalhe