7. 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);
});
});
Saturday, May 14, 2011
8. Jasmine / Spec
//# ContaSpec.js #
describe('Conta', function(){ Suite
it("deve realizar saques", function(){
var conta = new Conta({saldo:1000});
conta.saca(300)
expect(conta.saldo()).toEqual(300);
});
});
Saturday, May 14, 2011
9. 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);
});
});
Saturday, May 14, 2011
10. Jasmine / Spec
//# ContaSpec.js #
describe('Conta', function(){
it("deve realizar saques", function(){
Spec
var conta = new Conta({saldo:1000});
conta.saca(300)
expect(conta.saldo()).toEqual(300);
});
});
Saturday, May 14, 2011
11. 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);
});
});
Saturday, May 14, 2011
12. 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);Expectation
});
});
Saturday, May 14, 2011
13. 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);
});
});
Saturday, May 14, 2011
14. 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);
});
Matcher
});
Saturday, May 14, 2011
15. 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);
});
});
Saturday, May 14, 2011
16. 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);
});
});
Saturday, May 14, 2011
17. 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);
});
});
Saturday, May 14, 2011
18. 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);
});
});
Saturday, May 14, 2011
19. 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);
});
});
Saturday, May 14, 2011
20. Jasmine / beforeEach
describe('Conta', function(){
var conta;
beforeEach(function() {
var conta = new Conta({saldo:1000}); h()
Eac
}); ter o!
af to
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);
});
});
Saturday, May 14, 2011
21. 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(){
...
});
});
});
Saturday, May 14, 2011
22. 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(){
...
});
});
});
Saturday, May 14, 2011
23. 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);
É possíve l negar um Matcher.
expect(conta.saldo).not.toEqual(40);
expect(conta).not.toBe(“Mario”);
...
Saturday, May 14, 2011
24. Jasmine / Matchers
Tamb
expect(conta.saldo).toEqual(1000); cria ém é po
r se ssív
expect(conta).toBe(conta); u pr el
Matc ópri
expect(conta.titular).toMatch(/ana/); her o
expect(conta.saldo).toBeDefined();
expect(conta.dataEncerramento).toBeNull();
expect(conta.saca(-500).toThrow(Error);
É possíve l negar um Matcher.
expect(conta.saldo).not.toEqual(40);
expect(conta).not.toBe(“Mario”);
...
Saturday, May 14, 2011
25. 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();
});
});
Saturday, May 14, 2011
26. 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();
});
});
Saturday, May 14, 2011
27. 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);
});
});
Saturday, May 14, 2011
28. 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);
});
});
Saturday, May 14, 2011
29. 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);
});
});
Saturday, May 14, 2011
44. Sinon.js/Fake Timers
describe("Sinon Examples", function(){
it('FakeTimers', function(){
var data = new Date();
expect(elapsedTime(myDate)).toEqual(2);
});
});
Saturday, May 14, 2011
45. Sinon.js/Fake Timers
describe("Sinon Examples", function(){
it('FakeTimers', function(){
var data = new Date();
expect(elapsedTime(myDate)).toEqual(2);
});
}); dade
eloci
da v r!
Dep ende rowse
do b
Saturday, May 14, 2011
46. 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();
});
});
Saturday, May 14, 2011
47. 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();
});
});
Saturday, May 14, 2011
48. 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();
});
});
Saturday, May 14, 2011
49. 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();
});
});
Saturday, May 14, 2011
50. 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();
Each
after
}); ach e uteis.
oreE ser
bef
podem
});
Saturday, May 14, 2011
51. 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"}]);
);
});
});
Saturday, May 14, 2011
52. 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"}]);
);
});
});
Saturday, May 14, 2011
53. 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"}]);
);
});
});
Saturday, May 14, 2011
54. 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"}]);
);
});
});
Saturday, May 14, 2011
55. 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"}]);
);
});
});
Saturday, May 14, 2011
57. intelie.com/trabalhe
Obrigado
sergio.azevedo@intelie.com.br
falcao@intelie.com.br
Saturday, May 14, 2011
Notas del editor
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.