Presentation that I gave to the Groovy Users of Minnesota group on May 11, 2010. Using Cucumber, cuke4duke, and Groovy together for acceptance test-driven development.
Cucumber - use it to describe user stories and acceptance criteriasGeison Goes
BDD (Behavior-Driven Development): Way to create testable and automated behaviors that add value to the client before the existence of the source code, prevent behavior-based defects and generate a set of regression tests based on these behaviors.
The document summarizes a presentation on test automation with Cucumber-JVM. Cucumber allows writing tests in plain text and executing them as automated tests. It supports behavior driven development by writing specifications in a natural language format. Cucumber tests can be written in various programming languages like Java, Ruby, and executed using JUnit. It uses regular expressions and annotations to map steps in feature files to code implementations.
The document discusses Cucumber, a tool for writing acceptance tests in a business-readable domain-specific language called Gherkin. It touches on how Cucumber supports over 28 languages by compiling Gherkin grammars into the target language. It also provides examples of tagging scenarios and features in Cucumber to enable focused testing. Finally, it recommends further reading resources for learning more about Cucumber.
Outside-in Development with Cucumber and RspecJoseph Wilk
Talk given by Joseph Wilk at Scotland on Rails 2009. Examines how Cucumber and Rspec fit together in the testing workflow, how and why Cucumber is useful and how it works. Walks through a simple example based on renting DVDs showing how to use Cucumber and some of the best practices. Looks at how Webrat can drive Selenium to in-turn drive Cucumber features through the browser.
django forms are becoming disconnected form the frontend as we move towards API heavy systems. We attempt to bridge the gap by delivering form definition over API, render it in the frontend dynamically using Backbone & Handlebars, provide mechanism for submitting & validating forms over API.
This document provides an overview of building a Scala web application using the Play! framework. It begins with introductions to Scala and the Play! framework. It then covers topics like request handling, views, forms, database integration, the build system, internationalization, and testing. Exercises are provided to demonstrate creating routes, controllers, actions, views, forms, database models and more. The presenter is available to answer questions after the session and provides information on open positions at their company Lucid Software.
This document discusses using AngularJS with Django to build a single page application called Tweeter. Some key advantages of this approach are that it is faster since pages don't need to reload, any JavaScript framework can be used, and the backend is reusable for mobile apps. Django REST framework is used to create RESTful APIs for models like Tweets that Angular consumes through resources and controllers. Templates are used to pass data from Django to Angular initially, while Angular routing and partials handle page changes within the SPA. Overall this provides a smooth integration of Django and Angular that separates concerns for a better user experience.
Cucumber - use it to describe user stories and acceptance criteriasGeison Goes
BDD (Behavior-Driven Development): Way to create testable and automated behaviors that add value to the client before the existence of the source code, prevent behavior-based defects and generate a set of regression tests based on these behaviors.
The document summarizes a presentation on test automation with Cucumber-JVM. Cucumber allows writing tests in plain text and executing them as automated tests. It supports behavior driven development by writing specifications in a natural language format. Cucumber tests can be written in various programming languages like Java, Ruby, and executed using JUnit. It uses regular expressions and annotations to map steps in feature files to code implementations.
The document discusses Cucumber, a tool for writing acceptance tests in a business-readable domain-specific language called Gherkin. It touches on how Cucumber supports over 28 languages by compiling Gherkin grammars into the target language. It also provides examples of tagging scenarios and features in Cucumber to enable focused testing. Finally, it recommends further reading resources for learning more about Cucumber.
Outside-in Development with Cucumber and RspecJoseph Wilk
Talk given by Joseph Wilk at Scotland on Rails 2009. Examines how Cucumber and Rspec fit together in the testing workflow, how and why Cucumber is useful and how it works. Walks through a simple example based on renting DVDs showing how to use Cucumber and some of the best practices. Looks at how Webrat can drive Selenium to in-turn drive Cucumber features through the browser.
django forms are becoming disconnected form the frontend as we move towards API heavy systems. We attempt to bridge the gap by delivering form definition over API, render it in the frontend dynamically using Backbone & Handlebars, provide mechanism for submitting & validating forms over API.
This document provides an overview of building a Scala web application using the Play! framework. It begins with introductions to Scala and the Play! framework. It then covers topics like request handling, views, forms, database integration, the build system, internationalization, and testing. Exercises are provided to demonstrate creating routes, controllers, actions, views, forms, database models and more. The presenter is available to answer questions after the session and provides information on open positions at their company Lucid Software.
This document discusses using AngularJS with Django to build a single page application called Tweeter. Some key advantages of this approach are that it is faster since pages don't need to reload, any JavaScript framework can be used, and the backend is reusable for mobile apps. Django REST framework is used to create RESTful APIs for models like Tweets that Angular consumes through resources and controllers. Templates are used to pass data from Django to Angular initially, while Angular routing and partials handle page changes within the SPA. Overall this provides a smooth integration of Django and Angular that separates concerns for a better user experience.
Apigility – Lightning Fast API Development - OSSCamp 2014 OSSCube
Apigility - The world's easiest way to create high-quality APIs.
Apigility is an API Builder, designed to simplify
creating and maintaining useful, easy to consume, and
well structured APIs. Regardless of your experience in
API building, with Apigility you can build APIs that
enable mobile apps, developer communities, and any
other consumer controlled access to your applications.
Slim Framework 3.x entered beta in July 2015. This presentation introduces you to the main components of the framework, including the router, request and response objects, middleware, and dependency injection. The next best thing will be the docs on Slim's website, which are still a work in progress for 3.x, and the code itself - it's not hard to follow and is designed to be read.
We will cover whole of the web development basics comprising of HTML, CSS, JavaScript in this series.
Following are topics useful for any newbie to intermediate who is interested in learning Web Development
CRUD APIs can be a very powerful tool. However, simply PUTing and POSTing entities can lead to anemic endpoints that lack business value. Go beyond the traditional CRUD API and provide more expressive and meaningful REST endpoints with an API crafted with a commanding paradigm.
This document introduces the React stack, including React Native, for building cross-platform mobile and web applications using a single codebase. It discusses issues with building apps for different platforms separately and how React Native addresses this by allowing developers to write native mobile apps using JavaScript and React. It provides examples of basic React Native code for styling, layout, adding state, and integrating with Redux for state management.
Before Symfony was spelled with a capital “S” there was another symfony, the first version of the framework. It already meant a lot to me at the time. But with the arrival of Symfony 2 it became clear that something very important was happening in the world of PHP programming. It appears that this framework is able to turn amateur website makers (like I used to be) into actual software developers. What is the secret? What makes Symfony so special? And why am I still hooked?
We’ll look at pieces of code, the Symfony ecosystem, the people behind it, the things that have been written about it, and the experience that I have with it. We’ll take a trip down memory lane, collecting pieces for our Symfony scrapbook, while we try to construct an answer to these questions.
This document discusses Dexterity, a content type system for Plone that provides a more Pythonic and schema-based approach compared to earlier systems like Archetypes. It covers installing and using Dexterity, including defining a sample "Plonista" content type with fields, behaviors and a custom view template. The goals and philosophy of Dexterity emphasize reuse, simplicity, and automation over excessive flexibility. Key components that Dexterity builds on are also summarized.
1. The document discusses automated testing for Ruby applications using tools like Test::Unit, RSpec, Cucumber, Webrat, Selenium, and others.
2. It provides examples of how to write unit, integration, and acceptance tests using these tools.
3. The author argues that automated testing, while requiring effort, can improve software quality if the effort results in quality improvements. Quick, isolated, and automated tests are recommended.
This document provides an overview and plan for learning JavaScript. It covers introductory topics like variables, operators, functions, loops, and events. It also explains why JavaScript is important for web development as one of the three main languages, along with HTML and CSS. The document outlines how to integrate JavaScript into HTML pages and defines common JavaScript concepts.
Getting big without getting fat, in perlDean Hamstead
Thoughts on keeping your perl code lean as your code base gets bigger. Ideas on API structure for plugins and modules which can help. Some recommended option settings and module suggestions for handling configuration. A passing reference to logging.
A variety of pop culture, tech and start up culture references to keep things interesting.
All feedback welcome
Presented 18/08/2015 at Sydney PM
Making the Most of Modern PHP in Drupal 7Ryan Szrama
With Drupal 8 due to land later this year, the Drupal community is about to get a crash course in modern PHP. More of Drupal will use object oriented programming and its related design patterns. More of Drupal will be based on libraries that "weren't invented here." More of Drupal will require an understanding and use of a popular tool called Composer for dependency management (a mixture of Drupal's module .info files and drush).
If you haven't been heavily involved in the development of Drupal 8, all of these changes combined can be overwhelming or come with no perceivable benefit. However, that doesn't have to be the case. You can begin learning now to improve your own development capabilities and deliver better results to your customers by making the most of modern PHP even in your Drupal 7 projects.
This presentation introduces what a Drupal developer or agency can to do today to prepare for this future.
This document provides a technical summary of a complex integration using Dexterity to manage member profiles and synchronize data between a Plone website and a Salesforce CRM for the nonprofit Net Impact. Key features included editable member profiles, searchable member directories, multi-level privacy workflows, and nightly syncing of member data between the two systems. Custom behaviors, schemas, and forms were developed to handle things like member roles, profile editing, and converting Salesforce IDs to Plone UUIDs.
How To Structure Go Applications - Paul Bellamy - Codemotion Milan 2016Codemotion
1. The document discusses various ways to structure Go applications, including grouping code by domain, using interfaces to define dependencies, and separating applications into modules that can be tested independently.
2. It recommends creating packages for different parts of an application, such as an API, email provider, database adapter, and defining interfaces to abstract dependencies.
3. A sample application structure is shown with packages for the domain objects, API, email provider, database adapter, and a command package containing the executable.
SenchaCon 2016: Learn the Top 10 Best ES2015 Features - Lee Boonstra Sencha
In this session, Lee will cover the top 10 new features of ECMAScript 2015, their benefits, and go through code examples of how to use them. She will also talk about ECMAScript 2015 compatibilities and incompatibilities with the most widely used browsers today, and how you should plan on developing your applications with ECMAScript 2015.
We will cover whole of the web development basics comprising of HTML, CSS, JavaScript in this series.
Following are topics useful for any newbie to intermediate who is interested in learning Web Development
Introduction to Ruby on Rails by Rails Core alumnus Thomas Fuchs.
Originally a 3-4 hour tutorial, 150+ slides about Rails, Ruby and the ecosystem around it.
CT Software Developers Meetup: Using Docker and Vagrant Within A GitHub Pull ...E. Camden Fisher
This was a talk given at the second CT Software Developers Meetup (http://www.meetup.com/CT-Software-Developers-Meetup/). It covers how NorthPage is using Docker and Vagrant with a home grown Preview tool to increase the efficiency of the GitHub Pull Request Workflow.
Acceptance Test-driven Development (ATDD) involves collaboratively discussing acceptance criteria and examples before development begins. These criteria and examples are then distilled into concrete acceptance tests. The team then develops software features while hooking them up to the acceptance tests. Finally, the features and successful acceptance tests are demoed. Cucumber is a tool that allows executing acceptance tests written in a behavior-driven style using a Given-When-Then format. Cucumber tests can automate interactions with a web application using tools like Selenium WebDriver.
Apigility – Lightning Fast API Development - OSSCamp 2014 OSSCube
Apigility - The world's easiest way to create high-quality APIs.
Apigility is an API Builder, designed to simplify
creating and maintaining useful, easy to consume, and
well structured APIs. Regardless of your experience in
API building, with Apigility you can build APIs that
enable mobile apps, developer communities, and any
other consumer controlled access to your applications.
Slim Framework 3.x entered beta in July 2015. This presentation introduces you to the main components of the framework, including the router, request and response objects, middleware, and dependency injection. The next best thing will be the docs on Slim's website, which are still a work in progress for 3.x, and the code itself - it's not hard to follow and is designed to be read.
We will cover whole of the web development basics comprising of HTML, CSS, JavaScript in this series.
Following are topics useful for any newbie to intermediate who is interested in learning Web Development
CRUD APIs can be a very powerful tool. However, simply PUTing and POSTing entities can lead to anemic endpoints that lack business value. Go beyond the traditional CRUD API and provide more expressive and meaningful REST endpoints with an API crafted with a commanding paradigm.
This document introduces the React stack, including React Native, for building cross-platform mobile and web applications using a single codebase. It discusses issues with building apps for different platforms separately and how React Native addresses this by allowing developers to write native mobile apps using JavaScript and React. It provides examples of basic React Native code for styling, layout, adding state, and integrating with Redux for state management.
Before Symfony was spelled with a capital “S” there was another symfony, the first version of the framework. It already meant a lot to me at the time. But with the arrival of Symfony 2 it became clear that something very important was happening in the world of PHP programming. It appears that this framework is able to turn amateur website makers (like I used to be) into actual software developers. What is the secret? What makes Symfony so special? And why am I still hooked?
We’ll look at pieces of code, the Symfony ecosystem, the people behind it, the things that have been written about it, and the experience that I have with it. We’ll take a trip down memory lane, collecting pieces for our Symfony scrapbook, while we try to construct an answer to these questions.
This document discusses Dexterity, a content type system for Plone that provides a more Pythonic and schema-based approach compared to earlier systems like Archetypes. It covers installing and using Dexterity, including defining a sample "Plonista" content type with fields, behaviors and a custom view template. The goals and philosophy of Dexterity emphasize reuse, simplicity, and automation over excessive flexibility. Key components that Dexterity builds on are also summarized.
1. The document discusses automated testing for Ruby applications using tools like Test::Unit, RSpec, Cucumber, Webrat, Selenium, and others.
2. It provides examples of how to write unit, integration, and acceptance tests using these tools.
3. The author argues that automated testing, while requiring effort, can improve software quality if the effort results in quality improvements. Quick, isolated, and automated tests are recommended.
This document provides an overview and plan for learning JavaScript. It covers introductory topics like variables, operators, functions, loops, and events. It also explains why JavaScript is important for web development as one of the three main languages, along with HTML and CSS. The document outlines how to integrate JavaScript into HTML pages and defines common JavaScript concepts.
Getting big without getting fat, in perlDean Hamstead
Thoughts on keeping your perl code lean as your code base gets bigger. Ideas on API structure for plugins and modules which can help. Some recommended option settings and module suggestions for handling configuration. A passing reference to logging.
A variety of pop culture, tech and start up culture references to keep things interesting.
All feedback welcome
Presented 18/08/2015 at Sydney PM
Making the Most of Modern PHP in Drupal 7Ryan Szrama
With Drupal 8 due to land later this year, the Drupal community is about to get a crash course in modern PHP. More of Drupal will use object oriented programming and its related design patterns. More of Drupal will be based on libraries that "weren't invented here." More of Drupal will require an understanding and use of a popular tool called Composer for dependency management (a mixture of Drupal's module .info files and drush).
If you haven't been heavily involved in the development of Drupal 8, all of these changes combined can be overwhelming or come with no perceivable benefit. However, that doesn't have to be the case. You can begin learning now to improve your own development capabilities and deliver better results to your customers by making the most of modern PHP even in your Drupal 7 projects.
This presentation introduces what a Drupal developer or agency can to do today to prepare for this future.
This document provides a technical summary of a complex integration using Dexterity to manage member profiles and synchronize data between a Plone website and a Salesforce CRM for the nonprofit Net Impact. Key features included editable member profiles, searchable member directories, multi-level privacy workflows, and nightly syncing of member data between the two systems. Custom behaviors, schemas, and forms were developed to handle things like member roles, profile editing, and converting Salesforce IDs to Plone UUIDs.
How To Structure Go Applications - Paul Bellamy - Codemotion Milan 2016Codemotion
1. The document discusses various ways to structure Go applications, including grouping code by domain, using interfaces to define dependencies, and separating applications into modules that can be tested independently.
2. It recommends creating packages for different parts of an application, such as an API, email provider, database adapter, and defining interfaces to abstract dependencies.
3. A sample application structure is shown with packages for the domain objects, API, email provider, database adapter, and a command package containing the executable.
SenchaCon 2016: Learn the Top 10 Best ES2015 Features - Lee Boonstra Sencha
In this session, Lee will cover the top 10 new features of ECMAScript 2015, their benefits, and go through code examples of how to use them. She will also talk about ECMAScript 2015 compatibilities and incompatibilities with the most widely used browsers today, and how you should plan on developing your applications with ECMAScript 2015.
We will cover whole of the web development basics comprising of HTML, CSS, JavaScript in this series.
Following are topics useful for any newbie to intermediate who is interested in learning Web Development
Introduction to Ruby on Rails by Rails Core alumnus Thomas Fuchs.
Originally a 3-4 hour tutorial, 150+ slides about Rails, Ruby and the ecosystem around it.
CT Software Developers Meetup: Using Docker and Vagrant Within A GitHub Pull ...E. Camden Fisher
This was a talk given at the second CT Software Developers Meetup (http://www.meetup.com/CT-Software-Developers-Meetup/). It covers how NorthPage is using Docker and Vagrant with a home grown Preview tool to increase the efficiency of the GitHub Pull Request Workflow.
Acceptance Test-driven Development (ATDD) involves collaboratively discussing acceptance criteria and examples before development begins. These criteria and examples are then distilled into concrete acceptance tests. The team then develops software features while hooking them up to the acceptance tests. Finally, the features and successful acceptance tests are demoed. Cucumber is a tool that allows executing acceptance tests written in a behavior-driven style using a Given-When-Then format. Cucumber tests can automate interactions with a web application using tools like Selenium WebDriver.
This document provides an overview of Jenkins Pipeline, including what it is, how to get started, best practices, and advanced features. Pipeline allows configuring Jenkins jobs using code instead of the UI. Jobs are defined with Groovy scripts that can leverage features like branches, libraries, variables, and more. The document covers pipeline syntax, working with source control, error handling, testing scripts, and customizing build reporting. It emphasizes code review, simplicity, and avoiding inefficient practices that could impact the master node.
Continuous Deployment with Kubernetes, Docker and GitLab CIalexanderkiel
This document discusses continuous deployment of Clojure services to Kubernetes using Docker and GitLab CI. It provides an overview of Docker, Kubernetes, deploying a sample Clojure service, and configuring GitLab CI for continuous integration and deployment. The sample Clojure service is built as a Docker image, tested using GitLab CI, and deployed to Kubernetes clusters for testing and production using configuration files and GitLab CI pipelines.
The Art and Zen of Managing Nagios With PuppetMike Merideth
The document discusses using Puppet to manage Nagios configurations. It describes key Puppet features like exported resources, Hiera for separating code and data, and templates. It also discusses building Nagios configs using these features, provisioning new hosts, removing decommissioned hosts, and monitoring Puppet processes. The presenter then demonstrates these techniques in a Vagrant environment on GitHub.
Docker and Puppet for Continuous IntegrationGiacomo Vacca
Today developers want to change the code, build and deploy often, even several times per day.
New versions of software may need to be tested on different distributions, and with different configurations.
Achieving this with Virtual Machines it’s possible, but it’s very resource and time consuming. Docker provides an incredibly good solution for this, in particular if combined with Continuous Integration tools like Jenkins and Configuration Management tools like Puppet.
This presentation focuses on the opportunities to configure automatically Docker images, use Docker containers as disposable workers during your tests, and even running your Continuous Integration system inside Docker.
Automated Testing with Cucumber, PhantomJS and SeleniumDev9Com
The document discusses Behavior Driven Development (BDD) using Cucumber, Selenium, and PhantomJS. Cucumber uses a natural language syntax called Gherkin to write automated acceptance tests. Selenium is used to automate interactions with a web browser, while PhantomJS allows running those tests headlessly on a CI server without requiring a graphical browser. The example project demonstrates how Cucumber features written by PMs/BAs can be linked to Selenium step definitions to test a web application.
Fast and efficient software testing is easy with Docker. We often
use containers to maintain parity across development, testing, and production environments, but we can also use containerization to significantly reduce time needed for testing by spinning up multiple instances of fully isolated testing environments and executing tests in parallel. This strategy also helps you maximize the utilization of infrastructure resources. The enhanced toolset provided by Docker makes this process simple and unobtrusive, and you’ll see how Docker Engine, Registry, and Compose can work together to make your tests fast.
This document compares popular JavaScript automation frameworks for testing Node.js applications, including Protractor, WebdriverIO, and NightwatchJS. It provides details on each framework, such as supported features, syntax, and advantages. NightwatchJS is highlighted as a good option for end-to-end testing due to its built-in test runner, support for parallel testing, cross-browser testing, and mobile testing. While it requires callbacks, NightwatchJS has an easy syntax, inbuilt debugging, and is overall presented as a strong framework for end-to-end testing of Node.js applications.
This document discusses Behavior Driven Development (BDD) using the Ruby programming language. It provides an overview of test-driven development (TDD), then defines BDD as building upon TDD by formalizing good TDD habits like working outside-in from business goals. Gherkin is introduced as the language used for writing Cucumber features, using examples to clarify requirements. Cucumber is a tool for running automated acceptance tests written in a BDD style using Gherkin. It also discusses using Capybara to access and interact with web pages in tests.
Сергій Моренець
Java evangelist. Творець порталу it-simulator.com. Багаторазовий доповідач на конференції Java User Group. Автор навчального посібника "Розробка Java додатків".
Java script nirvana in netbeans [con5679]Ryan Cuprak
This document discusses using NetBeans as an IDE for JavaScript development. It provides an overview of NetBeans' features for JavaScript including syntax highlighting, code completion, debugging, support for frameworks like Angular and Node.js, and mobile development with Apache Cordova. It also demonstrates how to set up and configure NetBeans for common JavaScript tasks like adding libraries, using build tools like Grunt and Gulp, and setting up unit testing with Karma and Jasmine.
AgileSites 2 introduces several new features to improve the agile development process including AgileBuilder for automated installation, jar and static publishing for more efficient deployment, a Java content model for easier content modeling, support for multi-project development, and tools for continuous integration and better versioning. Key updates include using Vagrant machines for consistent development environments, publishing static assets and application logic as publishable assets, and recreating site states from the Java content model.
Nagios Conference 2014 - Mike Merideth - The Art and Zen of Managing Nagios w...Nagios
Mike Merideth's presentation on The Art and Zen of Managing Nagios with Puppet.
The presentation was given during the Nagios World Conference North America held Oct 13th - Oct 16th, 2014 in Saint Paul, MN. For more information on the conference (including photos and videos), visit: http://go.nagios.com/conference
About go unit test, content contains:
- Why Unit Test
- Basic Knowledge
- Table Testing
- Testing HTTP
- Other Packages
- Other Mock Packages
- Testing with Docker
MyHeritage - QA Automations in a Continuous Deployment environmentMatanGoren
In this presentation we explain the CD mindset of the MyHeritage QA and how we use Watir, Appium, Ruby, Cumcumber and other supporting technologies to allow end to end testing.
These are the link mentioned in the presentation:
Continuous Deployment Applied at MyHeritage - http://www.slideshare.net/RanLevy/continuous-deployment-applied-at-myheritage
Appium - http://appium.io/
Ruby - https://www.ruby-lang.org/en/
Watir - http://watirwebdriver.com/
page-object - https://github.com/cheezy/page-object
Selenium Grid - https://github.com/SeleniumHQ/selenium/wiki/Grid2
Selenium-Grid-Extras - https://github.com/groupon/Selenium-Grid-Extras
Jenkins - https://jenkins-ci.org/
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20Michael Lihs
Presentation about open source tools to set up continuous integration and continuous deployment. Covers Git, Gitlab, Chef, Vagrant, Jenkins, Gatling, Dashing, TYPO3 Surf and some other tools. Shows some best practices for testing with Behat and Functional Testing.
Devops core principles
CI/CD basics
CI/CD with asp.net core webapi and Angular app
Iac Why and What?
Demo using Azure and Azure Devops
Docker why and what ?
Demo using Azure and Azure Devops
Kubernetes why and what?
Demo using Azure and Azure Devops
The document discusses using the Grunt task runner to manage build and testing tools for Drupal projects. It introduces Grunt and explains how it can be used to build a Drupal site from a codebase, validate code quality, and test functionality with Behat. The presentation demonstrates setting up a sample project with Grunt Drupal Tasks and running commands to build, validate, and test the project. It encourages adopting these practices for consistent workflows and encourages contributing to the Grunt Drupal Tasks project.
JavaScript Test-Driven Development with Jasmine 2.0 and Karma Christopher Bartling
This document discusses JavaScript test-driven development using Jasmine 2.0 and Karma. It introduces test-driven development principles and benefits, then covers the Karma test runner, PhantomJS browser, and features of the Jasmine testing framework including describe blocks, expectations, matchers, spies, and custom matchers. It also provides an example of mapping earthquakes and testing color-coded circles using magnitude and discusses code coverage and sustaining test-driven practices.
This document discusses test-driven development with Jasmine and Karma. It justifies TDD for JavaScript, provides an overview of TDD and its benefits. It then explains the basics of Jasmine including suites, specifications, matchers and spies. Finally it covers configuring Karma and using tools like PhantomJS for running tests and karma-coverage for generating code coverage reports.
Building IVR applications with Tropo, a cloud-based telephony and messaging system, is easy. This presentation details support for Tropo in Grails using the tropo-webapi-grails plugin.
CoffeeScript by Example is a document that provides 7 examples of using CoffeeScript. It summarizes CoffeeScript features like functions defined with ->, jQuery integration, string interpolation, comprehensions, lexical scoping, classes and objects, and function binding. It also discusses unit testing CoffeeScript code with Jasmine and spying with Sinon.js. Resources for learning more about CoffeeScript, related tools like Jasmine and Backbone.js, and the presenter's contact information are provided.
Acceptance Test Driven Development With Spec Flow And FriendsChristopher Bartling
The document discusses Acceptance Test Driven Development (ATDD) using SpecFlow and other tools. SpecFlow is a .NET framework that allows writing acceptance tests in a business-readable language and generates automated tests. Features describe system functionality through scenarios, and SpecFlow generates tests from scenarios. The document also discusses related tools like WatiN and WebAii for browser automation, best practices, and includes a demo of an ATDD-developed Net Present Value calculator.
This document provides an introduction to the Grails framework. It discusses the major components of Grails including controllers, views, domain objects, services, tag libraries and plugins. It also summarizes common Grails commands and techniques for extending applications using plugins.
This document summarizes a workshop on test-driven development in Groovy. The workshop introduces Groovy features that help with Java testing, and tools like Cucumber and cuke4duke for acceptance and behavior-driven testing. The goals are to demonstrate unit, integration and acceptance testing with Groovy, Cucumber and a sample Java web application. Attendees will get hands-on experience with these technologies. Prerequisites are a Java JDK and Maven. The presentation materials and sample code are available online.
This document discusses the iPhone OS platform and its potential as a "killer" platform. It outlines the strengths of the iPhone OS, including its compelling multi-touch devices (iPod Touch, iPhone, iPad), App Store marketplace, and developer tools. It also discusses opportunities for the platform such as expanding to multiple carriers and threats such as competition from Android. Key iPhone SDK frameworks and tools are also summarized, including UIKit, Foundation, Xcode, Interface Builder, the iPhone Simulator, and Instruments.
The document discusses REST (REpresentational State Transfer), an architectural style for building distributed systems. It covers REST concepts like resources, representations, URIs, HTTP methods, caching, and versioning. It provides guidance on designing RESTful APIs, including determining resources, supported methods, and return codes. Content negotiation and tools for testing REST APIs are also mentioned.
The document discusses Grails, a web application framework built on Groovy and Java. It provides an overview of Grails and Groovy, how they simplify Java web development through conventions over configuration, integration with Java and tools like Hibernate and Spring, and how domain classes, GORM, and scaffolding are used to build the model-view-controller structure of a Grails app. Key features highlighted include dynamic typing through Groovy, seamless use of Java code and libraries, and enhanced developer productivity.
This document discusses rich internet applications (RIAs) and various technologies used to create them such as Adobe Flash, Flex, and AIR, Microsoft Silverlight, and JavaFX. It provides overviews of the capabilities and features of these technologies, their history and development, and barriers to their adoption. Examples of companies using different RIA technologies are given and questions are posed about satisfaction with current AJAX applications and interest in RIA technologies.
4. Why?
• Customer/business not engaged in story
process
• User stories without good acceptance tests
• Ambiguous “developer done”
5. Acceptance Test-Driven
Development
• Acceptance tests are owned by the
customer/business owner
• Specify the “what” of a feature
• Expressed in the language of the problem
domain
• Written as a team
6. Why ATDD?
• Features need to be unambiguously and
concisely specified
• Developers need to know when they are
done with a feature
• Automated testing to ensure features never
regress/break
7. Cucumber
• A behavior-driven development (BDD) tool
• Outside-in testing
• Business-readable DSL
• Implemented in Ruby, runs on JRuby
• Supports tests in tables, ala FIT
• http://cukes.info/
11. Organizing Features
• The features directory can contain
subdirectories of feature themes
features
insurance
accounts_payable
invoicing
12. Scenarios
• Consist of steps
• Given, When, and Then
• Executable via matching step definitions
• http://blog.objectmentor.com/articles/
2008/11/27/the-truth-about-bdd
13. Steps
• Given: put the system in a known state
• When: describes the key action
• Then: observe outcome(s)
• Use And and But to augment the three
steps
14. Step definitions
• Executable code
• Use regular expressions to match the steps
in feature files
• Typically written in Ruby
• Foreshadow: cuke4duke allows any JVM
language to be used
15. Hooks
• Allows running code at various points of
the Cucumber test cycle
• Typically reside in the support directory
• Scenario hooks: Before, After
• Step hooks: AfterStep
16. Background
• Add context to a set of scenarios in a
feature
• Run before each scenario, but after the
Before hooks
• Typically consist of Given and And steps
17. Tags
• Allow categorization of features and
scenarios
• Features and scenarios can have multiple tags
@dbunit-load
Scenario: Delete a photo album
18. Tagged hooks
• Allows fine-grained control of hooks for
certain features or scenarios
Before(‘@dbunit-load’)
19. cuke4duke
• Brings Cucumber to the JVM via JRuby
• No need to program in Ruby
• Step definitions, hooks and other
supporting classes can be implemented in a
variety of JVM languages
20. JRuby dependency
• Use the following system property to install
Ruby gems for use by cuke4duke
-Dcucumber.installGems=true
• Necessary for first-time installs and
cuke4duke upgrades
21. cuke4duke
• Ant support
• Maven support via plugin
• Spring Framework support (Java step
definitions only)
• Google Guice support
22. Filtering with tags
• Tags are helpful for filtering groups of
scenarios during a execution run
• Ensure Maven POM has cukeArgs as a pass-
through argument
<cucumberArg>${cukeArgs}</cucumberArg>
• Use the work in progress tag: @wip
mvn cuke4duke:cucumber -DcukeArgs="--tags @wip"
23. Groovy’s role
• Step definitions can be written in many JVM
languages
• Groovy works well for step definitions and
other helper objects
25. WebDriver
• Web UI testing tool
• Being merged with Selenium for 2.0 release
• Native browser control, not JavaScript
• Firefox extension
• Internet Explorer Automation controls
• Object-based API
26. PageObjects pattern
• Use the PageObject pattern to verify web
elements on a page
• DRY up your verification logic
• Use PageFactory to bind the WebDriver
and WebElement objects to your
PageObject implementation
27. Cucumber book
• Co-authored by Aslak Hellesøy
• Creator of Cucumber and
cuke4duke