1 of 15

BDD End-to-end Browser-Testing mit Node.js

unKonf 2016 · 16.4.2016

2 of 15

Markus Tacker

Channeller of Technological Obscurities (CTO)

3 of 15

Turning organizations �into entrepreneurial networks

4 of 15

“The way to creating

Leaders at every level is

The Way of Resourceful Humans”

“The way to creating

Leaders at every level is

The Way of Resourceful Humans

Captain David L. Marquet

US Navy (retired) Captain

Nuclear Submarine USS Santa Fe

Captain David L. Marquet

US Navy (retired) Captain

Nuclear Submarine USS Santa Fe

5 of 15

Resourceful Technology

  • JavaScript (ES6)
    • Backend: Node.js, Redis, CQRS/ES
    • Frontend: Angular.js (1.5+), Bootstrap v4, make
  • Android, iOS
  • Commodity: in the cloud
    • AWS
      • Elastic Beanstalk
      • Lambda
    • Travis CI
    • Greenkeeper.io
    • Google Apps for Work
    • Slack

6 of 15

Resourceful Tools

netwoRHk

enables, promotes and visualizes truly customer-focused teamwork

staRHs

beautifully visualized 360-degree feedback

caRHds

enables, demands and visualises everybody to contribute to valuable meetings

7 of 15

BDD: Short intro

Let user stories drive your (product) development

Title (one line describing the story)��(Narrative)�As a [role]�I want [feature]�So that [benefit]��Scenario 1…n: Title�Given [context]� And [some more context]...�When [event]�Then [outcome]� And [another outcome]...

Read more at: http://dannorth.net/whats-in-a-story/

8 of 15

BDD: Benefits

  • plain english
  • easy to scan
  • easy to discuss about with non-developers
  • not tied to code (in contrast to unit tests)
  • user-story format widely used in agile teams

9 of 15

Browser-based testing: PITA

applying BDD to browser based testing …

  • makes writing tests more fun
  • forces you to write expressive markup
  • takes time to implement underlying execution logic

10 of 15

Yadda: BDD for Node.js

https://github.com/acuminous/yadda

  • General purpose BDD library, can be run with your test runner
  • we use mocha
  • and Selenium (we want real browser tests)
  • headless is also supported via PhantomJS

11 of 15

Yadda: BDD for Node.js

How it works:

  • testrunner reads .feature files
  • initiates global context with a selenium instance
  • executes steps
  • for every condition (regexp match) a method in the context files is called
  • which calls your favorite assertion library

12 of 15

Context step definition example

Step:

When I enter "187.000 €" into the input amount

Step definition:

.when(/^I enter "([^"]+)" into the input (.+)$/, function (value, input, next) {� this.driver.findElement(By.name(input)).sendKeys(r(value)).then(next);� })

13 of 15

Live demo ☠

14 of 15

Questions?

15 of 15

Thank you!