SlideShare ist ein Scribd-Unternehmen logo
1 von 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

Weitere ähnliche Inhalte

Ähnlich wie 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
 

Ähnlich wie 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
 

Kürzlich hochgeladen

Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
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
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
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
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 

Kürzlich hochgeladen (20)

Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
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...
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
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
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 

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