SlideShare una empresa de Scribd logo
1 de 19
S(p)exy testing in Coffeescript and Node.js




 Aaron Murray                Nicholas Vaidyanathan
 @WeAreFractal                   @SWVisionary
We’re glad you’re here!




But you obviously care about tests, so
 let’s talk about some terminology…
TDD, ATDD, BDD, DDD?
                          That’s a lot of DD’s

• TDD = Test Driven Development – Development Methodology, write tests
  first, test using xUnit – make sure the code works

• ATDD = Acceptance Test Driven Development – business-readable, Team-
  driven, tests owned by client – make sure the features are correct

• BDD = Behavior Driven Development – Team-driven, “Should”, “Given,
  When, Then” – extends TDD and incorporates ATDD

• DDD = Domain Driven Design – outlines the idea of the Ubiquitous
  Language used between non-technical stakeholders and developers
Wait, DDD? Why?
• What does DDD have to do with BDD?
• Proper architecture helps you
  – set up smallest possible services
  – Focus on nouns and verbs
  – Describes behavior, which drives BDD process
• Testing IS Design!!!!

• GOOD ARCHITECTURE IS PIVOTAL TO
  SUCCESSFUL BDD!
In the beginning, there was TDD
• Test Driven Development
  – Rediscovered by Kent Beck @kentbeck
• Simple Process
  – Test
  – Code
  – Refactor
Tests looked like this




• http://junit.sourceforge.net/doc/cookbook/cook
  book.htm
Then we came to ATDD
                      • TDD is a programming practice, not
                        a testing technique.
                      • Acceptance Test Driven
                        Development (ATDD) also involves
                        creating tests before code
                      • tests represent expectations of
                        behavior the software should have.
                      • team creates one or more
                        acceptance-level tests for a feature
                        before beginning work on it.
                      • team discusses tests and captures
                        them when working with the
                        business stakeholder(s) to
                        understand a story on the backlog.



• http://testobsessed.com/wp-
  content/uploads/2011/04/atddexample.pdf
And BDD
• Evolved out of established agile practices and is designed to
  make them more accessible and effective for teams new to
  agile software delivery.
• Premises
   –   Test method names should be sentences
   –   A simple sentence template keeps test methods focused
   –   An expressive test name is helpful when a test fails
   –   “Behaviour” is a more useful word than “test”
   –   Determine the next most important behaviour
   –   Requirements are behaviour,too
   –   BDD provides a “ubiquitous language” for analysis
   –   Acceptance criteria should be executable
• http://dannorth.net/introducing-bdd/
BDD Breakdown
Fundamentally Two Types of BDD Tools

Business-readable output
    –   Replacement/Extension for TDD at the Unit-testing level
    –   Artifacts owned by developers (code)
    –   Provides other stakeholders with reports after developers have done the work
    –   Gspec, Spock, EasyB


Business-readable input
    –   Based on Acceptance Testing – coarse-grained features
    –   Artifacts owned by client
    –   Stakeholder involvement before developers have done any work
    –   Cucumber, FitNesse


    Not exclusive – can and probably need to be combined
EasyB
                                   business-readable output

input                                                output
scenario "Two amounts with the same currencies are   2 scenarios executed successfully.
       added", {
  given "Two different amounts with the same              Story: money
       currencies", {
    money1 = new Money(12, "CHF")                         scenario Two amounts with the same
    money2 = new Money(14, "CHF")
                                                        currencies are added
                                                           given Two different amounts with
    expected = new Money(26, "CHF")                     the same currencies
  }                                                        when Add given amounts
  when "Add given amounts" , {                             then New amount is sum of two
    result = money1.add(money2)                         given ones
  }                                                       scenario Two amounts with different
  then "New amount is sum of two given ones", {         currencies are added
    result.equals(expected).shouldBe true                  given Two amounts with different
  }                                                     currencies
                                                           when Add given amounts
}
                                                           then Operation should fail
…
<<truncated>>
Step 1: write your feature
                        Addition.feature
Feature: Addition
  In order to avoid silly mistakes
  As a math idiot
  I want to be told the sum of two numbers

 Scenario: Add two numbers
   Given I have entered <input_1> into the calculator
   And I have entered <input_2> into the calculator
   When I press <button>
   Then the result should be <output> on the screen

 Examples:
   | input_1   |   input_2   |   button   |   output   |
   | 20        |   30        |   add      |   50       |
   | 2         |   5         |   add      |   7        |
   | 0         |   40        |   add      |   40       |
Step 2: step definition
                     CalculatorSteps.groovy
this.metaClass.mixin(cuke4duke.GroovyDsl)

Before() {
    calc = new Calculator()
}

Given(~"I have entered (d+) into the calculator") { int n ->
    calc.push n
}

When(~"I press (w+)") {op ->
    result = calc.send(op)
}

Then(~"the result should be (.*) on the screen") { int r ->
    assert r == result
}
Step 4: write code to make it pass
                          Calculator.groovy
class Calculator {
    def numbers = []

    void push(number) {
        numbers << number
    }

    def send(operation) {
        def result
        switch (operation) {
            case "add":
                result = add()
        }
        numbers.clear()
        result
    }

    private def add() {
        numbers.sum()
    }
}
BDD in Java/Coffeescript and Node
• Best available frameworks
  – Jasmine
  – Vows
• Comparison
  – http://stackoverflow.com/questions/4115492/jav
    ascript-bdd-vows-kyuri-vs-jasmine
• So…
Introducing
•   Built in Node.js natively
•   Written in CoffeeScript
•   Modular, clean architecture
•   Designed to dramatically simplify the BDD process
•   Provides an annotation based mechanism for
    defining your tests
Example spec
Benefits
• Clean syntax
• Doesn’t pollute global namespace
• Flexibility

• Give it a try
   – https://github.com/wearefractal/spex
• LIVE DEMO

Más contenido relacionado

Similar a Bdd spex

Bdd for-dso-1227123516572504-8
Bdd for-dso-1227123516572504-8Bdd for-dso-1227123516572504-8
Bdd for-dso-1227123516572504-8Frédéric Delorme
 
My Dad Won't Buy Me DevOps
My Dad Won't Buy Me DevOpsMy Dad Won't Buy Me DevOps
My Dad Won't Buy Me DevOpsXebiaLabs
 
AI與大數據數據處理 Spark實戰(20171216)
AI與大數據數據處理 Spark實戰(20171216)AI與大數據數據處理 Spark實戰(20171216)
AI與大數據數據處理 Spark實戰(20171216)Paul Chao
 
BDD testing with cucumber
BDD testing with cucumberBDD testing with cucumber
BDD testing with cucumberDaniel Kummer
 
ITB2017 - Intro to Behavior Driven Development
ITB2017 - Intro to Behavior Driven DevelopmentITB2017 - Intro to Behavior Driven Development
ITB2017 - Intro to Behavior Driven DevelopmentOrtus Solutions, Corp
 
Tdd for BT E2E test community
Tdd for BT E2E test communityTdd for BT E2E test community
Tdd for BT E2E test communityKerry Buckley
 
Practicing Red, Green, Refactor!
Practicing Red, Green, Refactor!Practicing Red, Green, Refactor!
Practicing Red, Green, Refactor!XPDays
 
CBDW2014 - Behavior Driven Development with TestBox
CBDW2014 - Behavior Driven Development with TestBoxCBDW2014 - Behavior Driven Development with TestBox
CBDW2014 - Behavior Driven Development with TestBoxOrtus Solutions, Corp
 
2014 11 20 Drupal 7 -> 8 test migratie
2014 11 20 Drupal 7 -> 8 test migratie2014 11 20 Drupal 7 -> 8 test migratie
2014 11 20 Drupal 7 -> 8 test migratiehcderaad
 
Programming as a writing genre
Programming as a writing genreProgramming as a writing genre
Programming as a writing genreStephen Frezza
 
Getting started with code composer studio v4 for tms320 f2812
Getting started with code composer studio v4 for tms320 f2812Getting started with code composer studio v4 for tms320 f2812
Getting started with code composer studio v4 for tms320 f2812Pantech ProLabs India Pvt Ltd
 
2011-02-03 LA RubyConf Rails3 TDD Workshop
2011-02-03 LA RubyConf Rails3 TDD Workshop2011-02-03 LA RubyConf Rails3 TDD Workshop
2011-02-03 LA RubyConf Rails3 TDD WorkshopWolfram Arnold
 

Similar a Bdd spex (20)

Bdd for-dso-1227123516572504-8
Bdd for-dso-1227123516572504-8Bdd for-dso-1227123516572504-8
Bdd for-dso-1227123516572504-8
 
My Dad Won't Buy Me DevOps
My Dad Won't Buy Me DevOpsMy Dad Won't Buy Me DevOps
My Dad Won't Buy Me DevOps
 
AI與大數據數據處理 Spark實戰(20171216)
AI與大數據數據處理 Spark實戰(20171216)AI與大數據數據處理 Spark實戰(20171216)
AI與大數據數據處理 Spark實戰(20171216)
 
BDD testing with cucumber
BDD testing with cucumberBDD testing with cucumber
BDD testing with cucumber
 
Coding Naked 2023
Coding Naked 2023Coding Naked 2023
Coding Naked 2023
 
ITB2017 - Intro to Behavior Driven Development
ITB2017 - Intro to Behavior Driven DevelopmentITB2017 - Intro to Behavior Driven Development
ITB2017 - Intro to Behavior Driven Development
 
Rspec
RspecRspec
Rspec
 
Tdd for BT E2E test community
Tdd for BT E2E test communityTdd for BT E2E test community
Tdd for BT E2E test community
 
Practicing Red, Green, Refactor!
Practicing Red, Green, Refactor!Practicing Red, Green, Refactor!
Practicing Red, Green, Refactor!
 
Test box bdd
Test box bddTest box bdd
Test box bdd
 
CBDW2014 - Behavior Driven Development with TestBox
CBDW2014 - Behavior Driven Development with TestBoxCBDW2014 - Behavior Driven Development with TestBox
CBDW2014 - Behavior Driven Development with TestBox
 
Couchbas for dummies
Couchbas for dummiesCouchbas for dummies
Couchbas for dummies
 
2014 11 20 Drupal 7 -> 8 test migratie
2014 11 20 Drupal 7 -> 8 test migratie2014 11 20 Drupal 7 -> 8 test migratie
2014 11 20 Drupal 7 -> 8 test migratie
 
Programming as a writing genre
Programming as a writing genreProgramming as a writing genre
Programming as a writing genre
 
TDD, BDD and mocks
TDD, BDD and mocksTDD, BDD and mocks
TDD, BDD and mocks
 
Behavior-Driven Development with JGiven
Behavior-Driven Development with JGivenBehavior-Driven Development with JGiven
Behavior-Driven Development with JGiven
 
Getting started with code composer studio v4 for tms320 f2812
Getting started with code composer studio v4 for tms320 f2812Getting started with code composer studio v4 for tms320 f2812
Getting started with code composer studio v4 for tms320 f2812
 
[TestWarez 2017] Behavior Driven Development in a complex environment - Consu...
[TestWarez 2017] Behavior Driven Development in a complex environment - Consu...[TestWarez 2017] Behavior Driven Development in a complex environment - Consu...
[TestWarez 2017] Behavior Driven Development in a complex environment - Consu...
 
Bdd with m spec
Bdd with m specBdd with m spec
Bdd with m spec
 
2011-02-03 LA RubyConf Rails3 TDD Workshop
2011-02-03 LA RubyConf Rails3 TDD Workshop2011-02-03 LA RubyConf Rails3 TDD Workshop
2011-02-03 LA RubyConf Rails3 TDD Workshop
 

Último

How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfhans926745
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 

Último (20)

How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 

Bdd spex

  • 1. S(p)exy testing in Coffeescript and Node.js Aaron Murray Nicholas Vaidyanathan @WeAreFractal @SWVisionary
  • 2.
  • 3. We’re glad you’re here! But you obviously care about tests, so let’s talk about some terminology…
  • 4. TDD, ATDD, BDD, DDD? That’s a lot of DD’s • TDD = Test Driven Development – Development Methodology, write tests first, test using xUnit – make sure the code works • ATDD = Acceptance Test Driven Development – business-readable, Team- driven, tests owned by client – make sure the features are correct • BDD = Behavior Driven Development – Team-driven, “Should”, “Given, When, Then” – extends TDD and incorporates ATDD • DDD = Domain Driven Design – outlines the idea of the Ubiquitous Language used between non-technical stakeholders and developers
  • 5. Wait, DDD? Why? • What does DDD have to do with BDD? • Proper architecture helps you – set up smallest possible services – Focus on nouns and verbs – Describes behavior, which drives BDD process • Testing IS Design!!!! • GOOD ARCHITECTURE IS PIVOTAL TO SUCCESSFUL BDD!
  • 6. In the beginning, there was TDD • Test Driven Development – Rediscovered by Kent Beck @kentbeck • Simple Process – Test – Code – Refactor
  • 7. Tests looked like this • http://junit.sourceforge.net/doc/cookbook/cook book.htm
  • 8. Then we came to ATDD • TDD is a programming practice, not a testing technique. • Acceptance Test Driven Development (ATDD) also involves creating tests before code • tests represent expectations of behavior the software should have. • team creates one or more acceptance-level tests for a feature before beginning work on it. • team discusses tests and captures them when working with the business stakeholder(s) to understand a story on the backlog. • http://testobsessed.com/wp- content/uploads/2011/04/atddexample.pdf
  • 9. And BDD • Evolved out of established agile practices and is designed to make them more accessible and effective for teams new to agile software delivery. • Premises – Test method names should be sentences – A simple sentence template keeps test methods focused – An expressive test name is helpful when a test fails – “Behaviour” is a more useful word than “test” – Determine the next most important behaviour – Requirements are behaviour,too – BDD provides a “ubiquitous language” for analysis – Acceptance criteria should be executable • http://dannorth.net/introducing-bdd/
  • 10. BDD Breakdown Fundamentally Two Types of BDD Tools Business-readable output – Replacement/Extension for TDD at the Unit-testing level – Artifacts owned by developers (code) – Provides other stakeholders with reports after developers have done the work – Gspec, Spock, EasyB Business-readable input – Based on Acceptance Testing – coarse-grained features – Artifacts owned by client – Stakeholder involvement before developers have done any work – Cucumber, FitNesse Not exclusive – can and probably need to be combined
  • 11. EasyB business-readable output input output scenario "Two amounts with the same currencies are 2 scenarios executed successfully. added", { given "Two different amounts with the same Story: money currencies", { money1 = new Money(12, "CHF") scenario Two amounts with the same money2 = new Money(14, "CHF") currencies are added given Two different amounts with expected = new Money(26, "CHF") the same currencies } when Add given amounts when "Add given amounts" , { then New amount is sum of two result = money1.add(money2) given ones } scenario Two amounts with different then "New amount is sum of two given ones", { currencies are added result.equals(expected).shouldBe true given Two amounts with different } currencies when Add given amounts } then Operation should fail … <<truncated>>
  • 12. Step 1: write your feature Addition.feature Feature: Addition In order to avoid silly mistakes As a math idiot I want to be told the sum of two numbers Scenario: Add two numbers Given I have entered <input_1> into the calculator And I have entered <input_2> into the calculator When I press <button> Then the result should be <output> on the screen Examples: | input_1 | input_2 | button | output | | 20 | 30 | add | 50 | | 2 | 5 | add | 7 | | 0 | 40 | add | 40 |
  • 13. Step 2: step definition CalculatorSteps.groovy this.metaClass.mixin(cuke4duke.GroovyDsl) Before() { calc = new Calculator() } Given(~"I have entered (d+) into the calculator") { int n -> calc.push n } When(~"I press (w+)") {op -> result = calc.send(op) } Then(~"the result should be (.*) on the screen") { int r -> assert r == result }
  • 14. Step 4: write code to make it pass Calculator.groovy class Calculator { def numbers = [] void push(number) { numbers << number } def send(operation) { def result switch (operation) { case "add": result = add() } numbers.clear() result } private def add() { numbers.sum() } }
  • 15. BDD in Java/Coffeescript and Node • Best available frameworks – Jasmine – Vows • Comparison – http://stackoverflow.com/questions/4115492/jav ascript-bdd-vows-kyuri-vs-jasmine • So…
  • 16. Introducing • Built in Node.js natively • Written in CoffeeScript • Modular, clean architecture • Designed to dramatically simplify the BDD process • Provides an annotation based mechanism for defining your tests
  • 18.
  • 19. Benefits • Clean syntax • Doesn’t pollute global namespace • Flexibility • Give it a try – https://github.com/wearefractal/spex • LIVE DEMO