Van Wilson
Senior Consultant with Cardinal Solutions
Find more by Van Wilson: https://speakerdeck.com/vjwilson
All Things Open
October 26-27, 2016
Raleigh, North Carolina
Swagger UI enables generating documentation for RESTful APIs that is updated as the server code changes. It works with Spring Boot by adding dependencies, a configuration file, and annotations. This exposes API endpoints in the browser for testing and provides descriptive documentation of each service's title, function, inputs, and outputs.
Java 11 is the second LTS release after Java 8. Java 11 onwards, Oracle JDK would no longer be free for commercial use.
Agenda:
~ Java 11
~ How to download Java 11 free version
~ Important changes and information.
~ Java 11 Features and Enhancements
~ Removed Features
~ Deprecated Features
~ Migration to Java 11
Unit testing involves writing code to test individual units or components of an application to ensure they operate as intended. A unit test targets a specific function or class and ensures the code works correctly. A test suite is a collection of test cases that test a module. Frameworks like JUnit simplify the unit testing process and allow for test automation. JUnit tests are created in the same project structure with a "Test" suffix and use annotations to define test cases and suites. Tests can then be run and results analyzed to measure code coverage.
This document discusses testing React JS applications with tools like Mocha, Enzyme, and Webdriver.io. It covers why writing tests is important, provides examples of unit testing React components with Enzyme, and discusses how to do functional and integration testing with Webdriver.io. The document demonstrates testing architectures, common testing patterns like page objects, and concludes that frontend tests are important and not too costly to implement.
Hamcrest is a library for creating matchers for usage in unit tests, mocks and UI validation. This talk gives a brief introduction to using and writing Hamcrest matchers.
The topics covered:
* Basic introduction to Hamcrest
* Using Matchers in assertions
* Using Matchers with Mockito
* Writing custom matchers
* Ad-hoc matchers
Selenium Automation Testing Interview Questions And AnswersAjit Jadhav
This document contains 30 interview questions and answers related to Selenium testing. Some of the key questions covered include how to start the Selenium server from code, how to handle multiple browser windows, locate elements and verify text, connect to databases, and use Selenium Grid for parallel testing across different machines. The answers provide technical details on using Selenium commands, locators, and programming techniques.
React is a library for building user interfaces using components. It uses a virtual DOM for rendering components, which are pieces of UI defined as classes or functions. Components receive data via props and local state, and can be nested to build complex UIs. The component lifecycle includes mounting, updating, and unmounting phases. Data flows unidirectionally down the component tree. React has a vibrant ecosystem and community for continued learning.
Building React app using Test-driven DevelopmentNik Sumeiko
The document describes Test Driven Development (TDD) techniques for building a React app to book taxi rides. It discusses writing end-to-end tests before implementation to define acceptance criteria. It then shows incrementally implementing the app functionality and integrating units while ensuring tests continue to pass. Key aspects covered include writing tests first, designing business logic separately, and using an outside-in approach to build features based on critical user journeys.
Mockito is a mocking framework for Java that allows developers to focus tests on interactions between objects rather than states. It provides test doubles like mocks and spies to simulate dependencies and verify expected interactions. Mockito allows mocking method calls and configuring return values or exceptions to test different scenarios. It provides default values for unstubbed calls to avoid overspecifying tests.
This document provides an overview of test automation using Selenium. It discusses reasons to automate testing such as supporting regression testing and finding defects missed by manual testing. It also discusses when not to automate, such as when an application's behavior is unstable. The document then covers the Selenium framework, its components like Selenium IDE and WebDriver, and languages it supports like Java. It also discusses concepts in object-oriented programming relevant to test automation like classes, objects, inheritance and more.
This document provides an introduction to continuous integration with Jenkins. It discusses what continuous integration is and why Jenkins is commonly used for CI. Jenkins allows for easy installation and configuration, extensive extensibility through plugins, and distributed builds across multiple nodes. The document outlines common CI workflows and components like version control, automated building and testing. It also covers Jenkins' major functionalities, platforms supported, notifications, advanced configuration options and principles of continuous delivery.
Practical and conceptual overview of Javascript prototype paradigm, how to use prototypes, how do they work, and how do they differ from classes, and why there are no real classes in Javascript.
The document discusses performance testing using Apache JMeter. It covers topics like an overview of performance testing, the purpose of performance testing, key types of performance testing like load testing and stress testing. It also discusses pre-requisites of performance testing, the performance testing life cycle, challenges of performance testing and how to record and playback tests using JMeter.
Ben McCormick gave a presentation on how to save time by testing with Jest. He began with an introduction and explained that Jest is a JavaScript testing framework developed by Facebook that aims to solve common testing problems. He then demonstrated how Jest saves time through fast setup, writing tests quickly using familiar syntax and APIs, running tests in parallel and with a smart watch mode, and providing clear errors to fix tests fast. He concluded with a demo of Jest's features and took questions.
- Angular modules help organize an application into blocks of related functionality. Modules declare components, directives, pipes and services that belong to that module.
- There are different types of modules like root modules, feature modules, and shared modules. The root module launches the app. Feature modules extend functionality. Shared modules contain reusable constructs.
- Modules can import and export specific constructs to make them available to other modules. Services declared in a module are singletons app-wide unless the module is lazy loaded. Core modules contain global services imported by the root module only.
Selenium IDE
Selenium RC
Web Driver
Selenium Grid
Source View
Adding User Extensions
-------------------------------------------------------
Created by: Pargev Ghazaryan
Reviewed by: Vladimir Soghoyan
Ogma Applications
To test and build the software continuously, Bugraptors also uses Jenkins to easily identify the changes in the project. Jenkins is a very famous open source tool that performs continuous integration and delivery of projects.
A walkthrough the main principles to reach solid NodeJS Applications with TypeScript language, Jest as Test Runner and NestJS as framework for structure.
The document discusses best practices for unit testing, including:
1. Tests should follow a 3 step structure of prepare input, call method, check output. They should be fast, consistent, atomic, and have single responsibility.
2. Tests should isolate the environment, classes, and test instances to avoid dependencies. Mocking is recommended for environment isolation.
3. The best practices aim to make tests independent, fast, and easy to maintain through techniques like mocking and separating test logic from production code.
The document provides an introduction to Selenium WebDriver. It discusses the architecture and components of Selenium 1.0 and 2.0. It describes the Selenium WebDriver API for finding elements, performing actions, and handling windows/frames. It also provides an example of creating a test in Java to validate search results on the Rambler website using Selenium WebDriver.
This presentation provides an overview of a Test Automation Framework with BDD and Cucumber. It also includes several open-source initiatives that Rhoynar Software Consulting (www.rhoynar.com) has been working on in the fields of QA Automation and DevOps. Lastly, it also includes links to some of the open-source projects that you can use right now for your work.
- Continuous Integration Infra a la OpenStack - https://github.com/Rhoynar/ci-infra
- An Email Verification Library in Java:
https://github.com/Rhoynar/EmailVerify
- Automatic Test Generation using Selenium WebDriver, Java and TestNG
https://github.com/Rhoynar/AutoTestR
- Barebones BDD and Cucumber Framework integrated with Java Maven and TestNG:
https://github.com/Rhoynar/qa-automation
JMeter is an Apache Jakarta project that can be used as a load testing tool for analyzing and measuring the performance of a variety of services, with a focus on web applications.
www.silenceit.ca
Swagger is a simple yet powerful representation of your RESTful API. With the largest ecosystem of API tooling on the planet, thousands of developers are supporting Swagger in almost every modern programming language and deployment environment. With a Swagger-enabled API, you get interactive documentation, client SDK generation and discoverability.
This document provides an introduction and overview of Node.js, including what Node.js is, its architecture and basics, how to write "Hello World" programs in Node.js and Express, how to use modules, errors, middleware, routers, Mongoose and MongoDB for databases, and the MEAN stack. It also describes a tutorial for building a backend API with Node.js, Express, Mongoose and MongoDB.
The document discusses Rachel Andrew's career journey from dancer to front-end developer and her contributions to advancing web standards. She encourages attendees to contribute to specifications, raise browser bugs, and help others to strengthen the open web platform. Contributing back helps future-proof one's skills and gives back to the community.
Building React app using Test-driven DevelopmentNik Sumeiko
The document describes Test Driven Development (TDD) techniques for building a React app to book taxi rides. It discusses writing end-to-end tests before implementation to define acceptance criteria. It then shows incrementally implementing the app functionality and integrating units while ensuring tests continue to pass. Key aspects covered include writing tests first, designing business logic separately, and using an outside-in approach to build features based on critical user journeys.
Mockito is a mocking framework for Java that allows developers to focus tests on interactions between objects rather than states. It provides test doubles like mocks and spies to simulate dependencies and verify expected interactions. Mockito allows mocking method calls and configuring return values or exceptions to test different scenarios. It provides default values for unstubbed calls to avoid overspecifying tests.
This document provides an overview of test automation using Selenium. It discusses reasons to automate testing such as supporting regression testing and finding defects missed by manual testing. It also discusses when not to automate, such as when an application's behavior is unstable. The document then covers the Selenium framework, its components like Selenium IDE and WebDriver, and languages it supports like Java. It also discusses concepts in object-oriented programming relevant to test automation like classes, objects, inheritance and more.
This document provides an introduction to continuous integration with Jenkins. It discusses what continuous integration is and why Jenkins is commonly used for CI. Jenkins allows for easy installation and configuration, extensive extensibility through plugins, and distributed builds across multiple nodes. The document outlines common CI workflows and components like version control, automated building and testing. It also covers Jenkins' major functionalities, platforms supported, notifications, advanced configuration options and principles of continuous delivery.
Practical and conceptual overview of Javascript prototype paradigm, how to use prototypes, how do they work, and how do they differ from classes, and why there are no real classes in Javascript.
The document discusses performance testing using Apache JMeter. It covers topics like an overview of performance testing, the purpose of performance testing, key types of performance testing like load testing and stress testing. It also discusses pre-requisites of performance testing, the performance testing life cycle, challenges of performance testing and how to record and playback tests using JMeter.
Ben McCormick gave a presentation on how to save time by testing with Jest. He began with an introduction and explained that Jest is a JavaScript testing framework developed by Facebook that aims to solve common testing problems. He then demonstrated how Jest saves time through fast setup, writing tests quickly using familiar syntax and APIs, running tests in parallel and with a smart watch mode, and providing clear errors to fix tests fast. He concluded with a demo of Jest's features and took questions.
- Angular modules help organize an application into blocks of related functionality. Modules declare components, directives, pipes and services that belong to that module.
- There are different types of modules like root modules, feature modules, and shared modules. The root module launches the app. Feature modules extend functionality. Shared modules contain reusable constructs.
- Modules can import and export specific constructs to make them available to other modules. Services declared in a module are singletons app-wide unless the module is lazy loaded. Core modules contain global services imported by the root module only.
Selenium IDE
Selenium RC
Web Driver
Selenium Grid
Source View
Adding User Extensions
-------------------------------------------------------
Created by: Pargev Ghazaryan
Reviewed by: Vladimir Soghoyan
Ogma Applications
To test and build the software continuously, Bugraptors also uses Jenkins to easily identify the changes in the project. Jenkins is a very famous open source tool that performs continuous integration and delivery of projects.
A walkthrough the main principles to reach solid NodeJS Applications with TypeScript language, Jest as Test Runner and NestJS as framework for structure.
The document discusses best practices for unit testing, including:
1. Tests should follow a 3 step structure of prepare input, call method, check output. They should be fast, consistent, atomic, and have single responsibility.
2. Tests should isolate the environment, classes, and test instances to avoid dependencies. Mocking is recommended for environment isolation.
3. The best practices aim to make tests independent, fast, and easy to maintain through techniques like mocking and separating test logic from production code.
The document provides an introduction to Selenium WebDriver. It discusses the architecture and components of Selenium 1.0 and 2.0. It describes the Selenium WebDriver API for finding elements, performing actions, and handling windows/frames. It also provides an example of creating a test in Java to validate search results on the Rambler website using Selenium WebDriver.
This presentation provides an overview of a Test Automation Framework with BDD and Cucumber. It also includes several open-source initiatives that Rhoynar Software Consulting (www.rhoynar.com) has been working on in the fields of QA Automation and DevOps. Lastly, it also includes links to some of the open-source projects that you can use right now for your work.
- Continuous Integration Infra a la OpenStack - https://github.com/Rhoynar/ci-infra
- An Email Verification Library in Java:
https://github.com/Rhoynar/EmailVerify
- Automatic Test Generation using Selenium WebDriver, Java and TestNG
https://github.com/Rhoynar/AutoTestR
- Barebones BDD and Cucumber Framework integrated with Java Maven and TestNG:
https://github.com/Rhoynar/qa-automation
JMeter is an Apache Jakarta project that can be used as a load testing tool for analyzing and measuring the performance of a variety of services, with a focus on web applications.
www.silenceit.ca
Swagger is a simple yet powerful representation of your RESTful API. With the largest ecosystem of API tooling on the planet, thousands of developers are supporting Swagger in almost every modern programming language and deployment environment. With a Swagger-enabled API, you get interactive documentation, client SDK generation and discoverability.
This document provides an introduction and overview of Node.js, including what Node.js is, its architecture and basics, how to write "Hello World" programs in Node.js and Express, how to use modules, errors, middleware, routers, Mongoose and MongoDB for databases, and the MEAN stack. It also describes a tutorial for building a backend API with Node.js, Express, Mongoose and MongoDB.
The document discusses Rachel Andrew's career journey from dancer to front-end developer and her contributions to advancing web standards. She encourages attendees to contribute to specifications, raise browser bugs, and help others to strengthen the open web platform. Contributing back helps future-proof one's skills and gives back to the community.
Scaling Your Logging Infrastructure With Syslog-NGAll Things Open
This document provides a summary of scaling logging infrastructure with syslog-ng. It discusses the main roles of syslog-ng including data collection, processing, filtering, and storage. It also covers topics like message parsing, anonymization, configuration, and community involvement. The document is intended to explain how syslog-ng can be used to build a scalable centralized logging solution.
Mark Mzyk
Engineering Manager with Chef
Find more by Mark Mzyk: https://speakerdeck.com/mmzyk
All Things Open
October 26-27, 2016
Raleigh, North Carolina
Valerie Parham-Thompson
Lead Database Consultant with Pythian
Find more by Valerie Parham-Thompson: https://speakerdeck.com/dataindataout
All Things Open
October 26-27, 2016
Raleigh, North Carolina
This document provides an introduction to React for developers. It explains that React is a JavaScript library for building user interfaces developed by Facebook. It then covers key React concepts like components, props, state, rendering, and the virtual DOM. It also discusses tools and patterns for architecting React apps like Flux, Redux, routing, internationalization, and async logic. Finally, it recommends designing state carefully, using standards like Flux Standard Action, avoiding side effects in reducers, and leveraging tools like React DevTools.
Student Pipeline to Open Source Communities using HFOSSAll Things Open
Heidi Ellis
Professor at Western New England University
Gregory Hislop
Professor at Drexel University
All Things Open
October 26-27, 2016
Raleigh, North Carolina
BFFs: UX & SEO Partnering to Design Successful ProductsAll Things Open
Hillary Pitts
Product Strategist for Smashing Boxes
Find more by Hillary Pitts: http://www.slideshare.net/HillaryPitts
All Things Open
October 26-27, 2016
Raleigh, North Carolina
Building a Distributed & Automated Open Source Program at NetflixAll Things Open
Andrew Spyker
Senior Software Engineer for Netflix
Find more by Andrew Spyker: http://www.slideshare.net/aspyker
All Things Open
October 26-27, 2016
Raleigh, North Carolina
Rachel Andrew
Co-founder of Perch CMS
Find more by Rachel Andrew: http://www.slideshare.net/rachelandrew
All Things Open
October 26-27, 2016
Raleigh, North Carolina
Andrew Spyker
Senior Software Engineer for Netflix
Find more by Andrew Spyker: http://www.slideshare.net/aspyker
All Things Open
October 26-27, 2016
Raleigh, North Carolina
Cross-platform Mobile Development on Open SourceAll Things Open
This document provides an overview of cross-platform mobile development using open source tools. It discusses hybrid mobile frameworks like Apache Cordova that allow building mobile apps with web technologies that are deployed to native app stores. While early hybrid apps had performance issues, newer frameworks discussed like React Native and NativeScript claim to generate truly native apps with high code reuse across platforms using JavaScript. The document also covers adjacent native frameworks like Xamarin that compile to native apps from C# instead of web technologies. Overall it introduces a variety of open source options for cross-platform mobile development.
Robert Knight, Software Engineer at Mendeley
Rob will explore how to take advantage of React's use of JavaScript/JSX and the virtual UI to catch regressions earlier and make writing and debugging tests for React components easier and faster.
War of Attrition: AWS vs. Google, IBM and Microsoft AzureIT Brand Pulse
AWS captured about 30% of the IaaS and PaaS market by 2014 through continuous innovation and low pricing. However, in 2014 major tech companies like Microsoft, Google, and IBM declared war on AWS by dedicating massive resources to cloud services. The document outlines four scenarios that could define victory for AWS or its competitors: 1) all companies continue growing at 2014 rates, 2) new market borders are drawn after 3 years, 3) Amazon runs out of supply, 4) AWS defends its territory while others slow growth. The outcome of this "war of attrition" between cloud providers remains uncertain.
This document provides an overview of test-driven development (TDD) and discusses:
- The key steps of TDD including writing a test, seeing it fail, writing code to pass the test, and refactoring.
- Popular Python testing tools like unittest, nose, pytest, and sure that can be used for TDD.
- How TDD is applied to JavaScript/CoffeeScript using frameworks like Mocha, Should.js, and Expect.js.
- The benefits of TDD including early detection of errors, improved design, and serving as documentation for code changes.
This document discusses testing strategies for the iOS Sync Engine. It provides overall test stats, including that unit tests make up 80% of tests and integration tests make up 20%. The main testing strategy is to test against a fake backend called MockTransportSession, which provides advantages like speed, flexibility and independence over using stubs. MockTransportSession simulates the real backend by making fake requests, managing an internal database, and responding to requests. Future plans include splitting tests into smaller frameworks to reduce runtime, running tests on pull requests, and using record/replay to keep MockTransportSession in sync with the real backend.
Automating JavaScript testing with Jasmine and Perlnohuhu
This document discusses automating JavaScript testing using Jasmine and Perl. It introduces Test::WWW::Jasmine, a module that takes Jasmine test specs, runs them in a Selenium-controlled browser, and outputs the results in TAP format. This allows running JavaScript tests from Perl similar to unit tests. Examples of Jasmine test specs and TAP output are shown. The document also discusses running the same Jasmine specs locally for development. It acknowledges some limitations but seeks feedback on the new module.
Testing Rapidly Changing Applications With Self-Testing Object-Oriented Selen...seleniumconf
Dan Cuellar discusses strategies for writing automated tests that are robust and maintainable in the face changing codebases and features. These include separating logical test actions from direct controller calls, centralizing site elements and logic, adding self-testing capabilities, consolidating product actions into abstracted libraries, and creating platform-agnostic test scripts. The goal is to design tests that can adapt easily without extensive rework when underlying systems evolve rapidly.
Mal ganz ehrlich: Testen im Frontend hat noch nie viel Spaß gemacht. In meinem Talk möchte ich mit Jest eine Testbibliothek vorstellen, die genau das ändern kann. Jest ist ohne viel Konfiguration direkt einsetzbar und bringt alles mit, was man von einer Testbibliothek erwartet (und noch mehr). An vielen praktischen Beispielen möchte ich meine Lieblingsfeatures wie z.B. Snapshot-Tests, Mocking oder das tolle CLI erläutern und zeigen, dass Testen im Frontend durchaus Spaß machen kann. Eine Ausrede weniger, um auf das Testen im Frontend zu verzichten!
Writing Well Abstracted Automation on Foundations of JelloDan Cuellar
The document discusses strategies for writing automated tests that are robust and can adapt to changing code. It recommends separating logical test actions from calls to controllers like Selenium. Centralizing site elements and logic into libraries allows changes to be made in one place. Platform-agnostic tests written at a high level of abstraction can be run across multiple platforms. Reflection and interfaces help make tests independent of specific implementations. These approaches help tests maintain agility as code evolves rapidly.
In this webinar, Dave Haeffner (Elemental Selenium, USA) discusses how to:
- Build an integrated feedback loop to automate test runs and find issues fast
- Setup your own infrastructure or connect to a cloud provider
-Dramatically improve test times with parallelization
https://huddle.eurostarsoftwaretesting.com/resource/webinar/use-selenium-successfully/
The document provides an overview of getting started with Selenium and outlines 8 steps to write automated tests:
1. Define a test strategy by determining what to test and which browsers to support
2. Choose a programming language like Java and set up dependencies
3. Learn Selenium fundamentals like locating elements and common actions
4. Write a first test to log in to a sample site
5. Create page objects and a base page to make tests reusable and maintainable
6. Add waits to make tests more resilient when waiting for elements
7. Set up a test harness for centralized setup/teardown, reporting and parallelization
8. Add cross-browser testing by using browser drivers locally or remotely
- Testing JavaScript code helps ensure quality and allows for refactoring and code handovers. Unit, integration, and functional testing methodologies were discussed.
- Siesta was introduced as a JavaScript testing tool that supports unit and functional testing for Ext JS and Sencha Touch. It allows simulating user interactions and verifying results.
- Writing testable code through separation of concerns, avoiding direct DOM manipulation, and supporting dependency injection were recommended to facilitate automated testing. Continuous integration was also recommended for running tests regularly.
Mock what? What Mock?Learn What is Mocking, and how to use Mocking with ColdFusion testing, development, and continuous integration. Look at Mocking and Stubbing with a touch of Theory and a lot of Examples, including what you could test, and what you should test… and what you shouldn't test (but might be fun).
Browser automation testing frameworks like Nightwatch.js allow developers to automatically test their web applications. Nightwatch.js provides an easy way to write tests using JavaScript. Tests can launch browsers, fill forms, click links, and verify outputs. Nightwatch.js tests can help developers catch errors that might break functionality and ensure compatibility across browsers. The documentation is good and it is actively maintained with over 10,000 downloads per month. Developers can integrate Nightwatch.js tests into their own projects to avoid future issues.
This document discusses the importance of unit testing JavaScript code. It provides reasons for testing JavaScript, such as avoiding bugs when refactoring code or introducing errors. The document discusses how to write testable JavaScript by separating business logic from views. It also recommends choosing JavaScript unit testing tools like Jasmine and Siesta, and integrating tests into continuous integration processes to run automatically on commits. Functional testing tools like Selenium are also mentioned for testing user interactions across browsers.
Unit testing and end-to-end testing are important for Angular applications. The document discusses various types of tests, including unit tests, integration tests, and end-to-end tests. It also covers tools for testing Angular applications, such as Jasmine for writing unit tests, Karma as a test runner, Protractor for end-to-end tests, and Angular testing utilities. The document provides recommendations on testing components and services, including how to set up tests and write tests with dependencies.
The document discusses challenges faced with automated testing at scale for a large codebase with many dependencies, technologies, and test types. It describes how the large number of tests led to slow build times, failures blocking changes, and reduced developer productivity. Specific issues mentioned include monolithic test organization, slow unit/functional tests, non-deterministic races/timeouts, and re-running all tests on every commit. The document advocates for strategies like separating test types, running in parallel, and using page objects to isolate tests from UI changes.
Unit testing refers to testing individual units or components of a Node.js application using frameworks like Jest, Mocha, and Chai. Tests reduce bugs, allow safe refactoring, and give confidence. Popular frameworks include Jest, Mocha, and Chai. Unit tests should test isolated parts of a program, be fast, isolated, repeatable, self-validating, and written before code. Async behavior requires adding a callback to wait for asynchronous functions to complete. Tools like Sinon can stub dependencies to avoid external connections during testing.
The document discusses unit testing with the Spock testing framework. It introduces Spock and outlines key concepts like the three pillars of good unit tests, Spock idioms, mocks and stubs, and continuous integration. Spock provides an expressive testing language based on Groovy that makes tests more readable, maintainable and trustworthy. Examples demonstrate how to write feature methods, use blocks, verify interactions, stub implementations, test exceptions, integrate with Spring, and perform HTTP calls and data-driven testing with Spock.
This document provides an introduction to unit testing. It discusses what should and should not be tested, how to structure tests using the Arrange Act Assert pattern, and tips for writing good tests. Some key points covered include testing complex code, edge cases, classes that change often, and avoiding testing globals, statics, and database interactions. The goal is to have tests that are independent, test single behaviors, and help find bugs when code changes.
Performance optimization is a crucial aspect of building ‘snappy’ client-side applications and something which all developers using jQuery should bear in mind. In this talk, we're going to take a look at some of the best practices, tips and tricks for improving the performance of your jQuery code in 2011 with some quick wins and a few new surprises along the way.
Automated Testing but like for PowerShell (April 2012)Rob Reynolds
This document discusses automated testing for PowerShell. It covers different types of automated tests like unit tests, integration tests, and behavior driven development. It introduces Pester, a framework for writing BDD-style tests in PowerShell. While Pester allows writing tests, it does not enable mocking or stubbing. The document demonstrates how to perform unit testing, stubbing, and mocking in PowerShell by overwriting functions and setting expectations and behaviors.
We Are All Testers Now: The Testing Pyramid and Front-End DevelopmentAll Things Open
The document provides an overview of test-driven development (TDD) principles and how to implement testing for front-end development. It discusses the benefits of TDD, such as avoiding bad designs and preventing regressions. It also addresses common challenges with TDD, like slowing initial velocity and ignored tests over time. The document then covers different levels of testing, including unit tests, integration tests, and functional/end-to-end tests using the testing pyramid as a framework. It provides examples of writing tests for pure and impure functions using the Jest testing framework. Finally, it discusses functional testing using Cucumber.js behavior-driven development.
Let's Create a GitHub Copilot Extension! - Nick Taylor, PomeriumAll Things Open
Presented at All Things Open AI 2025
Presented by Nick Taylor - Pomerium
Title: Let's Create a GitHub Copilot Extension!
Abstract: Get hands-on in this talk where we'll create a GitHub Copilot Extension from scratch.
We'll use the Copilot Extensions SDK, https://github.com/copilot-extensions/preview-sdk.js, and Hono.js, covering best practices like payload validation and progress notifications and error handling.
We'll also go through how to set up a dev environment for debugging, including port forwarding to expose your extension during development as well as the Node.js debugger.
By the end, we'll have a working Copilot extension that the audience can try out live.
Find more info about All Things Open:
On the web: https://www.allthingsopen.org/
Twitter: https://twitter.com/AllThingsOpen
LinkedIn: https://www.linkedin.com/company/all-things-open/
Instagram: https://www.instagram.com/allthingsopen/
Facebook: https://www.facebook.com/AllThingsOpen
Mastodon: https://mastodon.social/@allthingsopen
Threads: https://www.threads.net/@allthingsopen
Bluesky: https://bsky.app/profile/allthingsopen.bsky.social
2025 conference: https://2025.allthingsopen.org/
Leveraging Pre-Trained Transformer Models for Protein Function Prediction - T...All Things Open
Presented at All Things Open AI 2025
Presented by Tia Pope - North Carolina A&T
Title: Leveraging Pre-Trained Transformer Models for Protein Function Prediction
Abstract: Transformer-based models, such as ProtGPT2 and ESM, are revolutionizing protein sequence analysis by enabling detailed embeddings and advanced function prediction. This talk provides a hands-on introduction to using pre-trained open-source transformer models for generating protein embeddings and leveraging them for classification tasks. Attendees will learn to tokenize sequences, extract embeddings, and implement machine-learning pipelines for protein function annotation based on Gene Ontology (GO) or Enzyme Commission (EC) numbers. This session will showcase how pre-trained transformers can democratize access to advanced protein analysis techniques while addressing scalability and explainability challenges. After the talk, the speaker will provide a notebook to test basic functionality, enabling participants to explore the concepts discussed.
Find more info about All Things Open:
On the web: https://www.allthingsopen.org/
Twitter: https://twitter.com/AllThingsOpen
LinkedIn: https://www.linkedin.com/company/all-things-open/
Instagram: https://www.instagram.com/allthingsopen/
Facebook: https://www.facebook.com/AllThingsOpen
Mastodon: https://mastodon.social/@allthingsopen
Threads: https://www.threads.net/@allthingsopen
Bluesky: https://bsky.app/profile/allthingsopen.bsky.social
2025 conference: https://2025.allthingsopen.org/
Gen AI: AI Agents - Making LLMs work together in an organized way - Brent Las...All Things Open
Presented at All Things Open AI 2025
Presented by Brent Laster - Tech Skills Transformations
Title: Gen AI: AI Agents - Making LLMs work together in an organized way
Abstract: AI Agents are combinations of LLMs, tools, and custom roles that can autonomously perform tasks and make decisions based on context and user input. Multiple agents can be managed together to cooperatively handle individual tasks that are part of a larger project to accomplish an overall goal.
By combining capabilities like tool access, multi-step reasoning, and real-time adjustments, agents can construct and complete complex workflows and intelligent solutions. In this presentation, we'll look at what AI agents are, how they work, and how you can create and put them to work.
Find more info about All Things Open:
On the web: https://www.allthingsopen.org/
Twitter: https://twitter.com/AllThingsOpen
LinkedIn: https://www.linkedin.com/company/all-things-open/
Instagram: https://www.instagram.com/allthingsopen/
Facebook: https://www.facebook.com/AllThingsOpen
Mastodon: https://mastodon.social/@allthingsopen
Threads: https://www.threads.net/@allthingsopen
Bluesky: https://bsky.app/profile/allthingsopen.bsky.social
2025 conference: https://2025.allthingsopen.org/
You Don't Need an AI Strategy, But You Do Need to Be Strategic About AI - Jes...All Things Open
Presented at All Things Open AI 2025
Presented by Jessica Hall - Hallway Studio
Title: You Don't Need an AI Strategy, But You Do Need to Be Strategic About AI
Abstract: There’s so much noise about creating an “AI strategy,” it’s easy to feel like you’re already behind. But here’s the thing: you don’t need an AI strategy or a data strategy. Those things need to serve your business strategy and that requires strategic thinking.
Here’s what you’ll get:
A clear understanding of why AI is a means to an end—not the end itself—and how to use it to solve problems traditional methods can’t touch.
How to align AI with strategy using questions like “Where do we play? How do we win?” from Roger L. Martin and A.G. Lafley.
What successful AI initiatives have in common: clear value, smart use of unique data, and meaningful business impact.
A checklist to evaluate AI opportunities—covering metrics, workflows, and the human factors that make or break AI efforts.
Find more info about All Things Open:
On the web: https://www.allthingsopen.org/
Twitter: https://twitter.com/AllThingsOpen
LinkedIn: https://www.linkedin.com/company/all-things-open/
Instagram: https://www.instagram.com/allthingsopen/
Facebook: https://www.facebook.com/AllThingsOpen
Mastodon: https://mastodon.social/@allthingsopen
Threads: https://www.threads.net/@allthingsopen
Bluesky: https://bsky.app/profile/allthingsopen.bsky.social
2025 conference: https://2025.allthingsopen.org/
DON’T PANIC: AI IS COMING – The Hitchhiker’s Guide to AI - Mark Hinkle, Perip...All Things Open
Presented at All Things Open AI 2025
Presented by Mark Hinkle - Peripety Labs
Title: DON’T PANIC: AI IS COMING – The Hitchhiker’s Guide to AI
Abstract: AI is coming of age, and much like discovering intergalactic travel, it’s equal parts thrilling and terrifying. Fears of job loss, doomsday scenarios, and bureaucratic AI overlords dominate the conversation—but I think the reality is far less apocalyptic and far more exciting. With the right guide, you can navigate this new universe, adapt, and even thrive. That’s what AllThingsOpen.AI is all about—building a community where people and businesses don’t just survive AI’s rise but flourish in it. So grab your towel, keep an open mind, and let’s explore the future—without the panic. Listen to Conference Co-Producer and publisher of the Artificially Intelligent Enterprise, Mark Hinkle, provide a vision on how AI will play out in our lives.
Find more info about All Things Open:
On the web: https://www.allthingsopen.org/
Twitter: https://twitter.com/AllThingsOpen
LinkedIn: https://www.linkedin.com/company/all-things-open/
Instagram: https://www.instagram.com/allthingsopen/
Facebook: https://www.facebook.com/AllThingsOpen
Mastodon: https://mastodon.social/@allthingsopen
Threads: https://www.threads.net/@allthingsopen
Bluesky: https://bsky.app/profile/allthingsopen.bsky.social
2025 conference: https://2025.allthingsopen.org/
Fine-Tuning Large Language Models with Declarative ML Orchestration - Shivay ...All Things Open
Presented at All Things Open AI 2025
Presented by Shivay Lamba - Couchbase
Title: Fine-Tuning Large Language Models with Declarative ML Orchestration
Abstract: Large Language Models used in tools like ChatGPT are everywhere; however, only a few organisations with massive computing resources are capable of training such large models. While eager to fine-tune these models for specific applications, the broader ML community often grapples with significant infrastructure challenges.
In the session, the audience will understand how open-source ML tooling like Flyte (a Linux Foundation open-source orchestration platform) can be used to provide a declarative specification for the infrastructure required for a wide array of ML workloads, including the fine-tuning of LLMs, even with limited resources. Thus the attendee will learn how to leverage open-source ML toolings like Flyte's capabilities to streamline their ML workflows, overcome infrastructure constraints, reduce cost and unlock the full potential of LLMs in their specific use case. Thus making it easier for a larger audience to leverage and train LLMs.
Find more info about All Things Open:
On the web: https://www.allthingsopen.org/
Twitter: https://twitter.com/AllThingsOpen
LinkedIn: https://www.linkedin.com/company/all-things-open/
Instagram: https://www.instagram.com/allthingsopen/
Facebook: https://www.facebook.com/AllThingsOpen
Mastodon: https://mastodon.social/@allthingsopen
Threads: https://www.threads.net/@allthingsopen
Bluesky: https://bsky.app/profile/allthingsopen.bsky.social
2025 conference: https://2025.allthingsopen.org/
Leveraging Knowledge Graphs for RAG: A Smarter Approach to Contextual AI Appl...All Things Open
Presented at All Things Open AI 2025
Presented by David vonThenen - DigitalOcean
Title: Leveraging Knowledge Graphs for RAG: A Smarter Approach to Contextual AI Applications
Abstract: In the ever-evolving field of AI, retrieval-augmented generation (RAG) systems have become critical for delivering high-quality, contextually relevant answers in applications powered by large language models (LLMs). While vector databases have traditionally dominated RAG applications, graph databases, specifically knowledge graphs, offer a transformative approach to contextual AI that’s often overlooked. This approach provides unique advantages for applications requiring deep insights, intelligent search, and reasoning over both structured and unstructured sources, making it ideal for complex business scenarios.
Attendees will leave with an understanding of how to build a RAG system using a graph database and practical skills for data querying and insights retrieval. By comparing graph and vector database approaches, we’ll highlight when and why graph databases may offer superior benefits for managing complex data relationships. The session will provide concrete examples and advanced techniques, empowering participants to incorporate knowledge graphs into their AI systems for better data-driven outcomes and improved LLM performance. This discussion will conclude with a live demo showcasing key techniques and insights covered in this talk.
Find more info about All Things Open:
On the web: https://www.allthingsopen.org/
Twitter: https://twitter.com/AllThingsOpen
LinkedIn: https://www.linkedin.com/company/all-things-open/
Instagram: https://www.instagram.com/allthingsopen/
Facebook: https://www.facebook.com/AllThingsOpen
Mastodon: https://mastodon.social/@allthingsopen
Threads: https://www.threads.net/@allthingsopen
Bluesky: https://bsky.app/profile/allthingsopen.bsky.social
2025 conference: https://2025.allthingsopen.org/
Artificial Intelligence Needs Community Intelligence - Sriram Raghavan, IBM R...All Things Open
Presented at All Things Open AI 2025
Presented by Sriram Raghavan - IBM Research AI
Title: Artificial Intelligence Needs Community Intelligence
Find more info about All Things Open:
On the web: https://www.allthingsopen.org/
Twitter: https://twitter.com/AllThingsOpen
LinkedIn: https://www.linkedin.com/company/all-things-open/
Instagram: https://www.instagram.com/allthingsopen/
Facebook: https://www.facebook.com/AllThingsOpen
Mastodon: https://mastodon.social/@allthingsopen
Threads: https://www.threads.net/@allthingsopen
Bluesky: https://bsky.app/profile/allthingsopen.bsky.social
2025 conference: https://2025.allthingsopen.org/
Don't just talk to AI, do more with AI: how to improve productivity with AI a...All Things Open
Presented at All Things Open AI 2025
Presented by Sheng Liang - Acorn Labs
Title: Don't just talk to AI, do more with AI: how to improve productivity with AI agents
Find more info about All Things Open:
On the web: https://www.allthingsopen.org/
Twitter: https://twitter.com/AllThingsOpen
LinkedIn: https://www.linkedin.com/company/all-things-open/
Instagram: https://www.instagram.com/allthingsopen/
Facebook: https://www.facebook.com/AllThingsOpen
Mastodon: https://mastodon.social/@allthingsopen
Threads: https://www.threads.net/@allthingsopen
Bluesky: https://bsky.app/profile/allthingsopen.bsky.social
2025 conference: https://2025.allthingsopen.org/
Open-Source GenAI vs. Enterprise GenAI: Navigating the Future of AI Innovatio...All Things Open
Presented at All Things Open AI 2025
Presented by Dr. Ruth Akintunde - SAS Institute Inc.
Title: Open-Source GenAI vs. Enterprise GenAI: Navigating the Future of AI Innovation
Abstract: This talk explores the critical differences between Open-Source Generative AI and Enterprise Generative AI, highlighting their respective strengths and challenges. Open-Source GenAI fosters innovation through community collaboration, accessibility, and adaptability, while Enterprise GenAI prioritizes security, scalability, and reliability. Key aspects such as cost, ethical considerations, and long-term sustainability are examined to understand their impact on AI development and deployment. Ultimately, the talk advocates for a hybrid approach, leveraging the best of both worlds to drive AI innovation forward.
Find more info about All Things Open:
On the web: https://www.allthingsopen.org/
Twitter: https://twitter.com/AllThingsOpen
LinkedIn: https://www.linkedin.com/company/all-things-open/
Instagram: https://www.instagram.com/allthingsopen/
Facebook: https://www.facebook.com/AllThingsOpen
Mastodon: https://mastodon.social/@allthingsopen
Threads: https://www.threads.net/@allthingsopen
Bluesky: https://bsky.app/profile/allthingsopen.bsky.social
2025 conference: https://2025.allthingsopen.org/
The Death of the Browser - Rachel-Lee Nabors, AgentQLAll Things Open
Presented at All Things Open AI 2025
Presented by Rachel-Lee Nabors - AgentQL
Title: The Death of the Browser
Abstract: In ten years, Internet Browsers may be a nostalgic memory. As enterprises face mounting API costs and integration headaches, a new paradigm is emerging. The internet's evolution from an open highway into a maze of walled gardens and monetized APIs has created significant challenges for businesses—but it has also set the stage for accessing and organizing the world’s information.
This lightning talk traces our journey from the invention of the browser to the arms race of scraping for data and access to it to the dawn of AI agents, showing how the challenges of today opened the door to tomorrow. See how technologies refined by the web scraping community are combining with large language models to create practical alternatives to costly API integrations.
From the rise of platform monopolies to the emergence of AI agents, this timeline-based exploration will help you understand where we've been, where we are, and where we're heading. Join us for a glimpse of how AI agents are enabling a return to the era of free information with the web as the API.
Find more info about All Things Open:
On the web: https://www.allthingsopen.org/
Twitter: https://twitter.com/AllThingsOpen
LinkedIn: https://www.linkedin.com/company/all-things-open/
Instagram: https://www.instagram.com/allthingsopen/
Facebook: https://www.facebook.com/AllThingsOpen
Mastodon: https://mastodon.social/@allthingsopen
Threads: https://www.threads.net/@allthingsopen
Bluesky: https://bsky.app/profile/allthingsopen.bsky.social
2025 conference: https://2025.allthingsopen.org/
Making Operating System updates fast, easy, and safeAll Things Open
Presented at All Things Open 2024
Monday, October 28th, 2024
Presented by Matt Micene, Red Hat
Title: Making OS updates fast, easy, and safe
Abstract: What if I told you that:
* OS updates are less scary
* Changes move across environments quicker
* Consistency across systems is easier
and you only need to learn a few new things?
Maybe you think about your build process daily. Maybe 8 years ago, you found a way that works and try to never touch it (xkcd 2347 anyone?). In this session, you'll learn how to combine the container skills you already have with a few new tools to rethink your standard Linux builds.
Bootable containers combine lessons from several projects with years of production experience to build, deliver, and maintain your familiar Linux environment in a new way. Some of the things we think are 'just the way it is' turn out to be less concrete with this new perspective.
Applying container principles to these builds lets us change the way we think about custom versus shared components, how to track changes and make them visible, and how we can use tools that already exist to address a lot of the toil and trouble associated with building, testing, delivering, and updating gold images.
Reshaping the landscape of belonging to transform communityAll Things Open
Presented at All Things Open 2024
Presented by Winstina Hughes - Support Inclusion in Tech
Title: Reshaping the landscape of belonging to transform community
Abstract: The years leading up to being a Fellow on President Barack Obama’s 2012 campaign honed my advocacy skills, teaching me to speak up for myself and my community. Within the WordPress community, I found both refuge and purpose, learning the power of collaboration and global connection. These experiences, like threads woven together, prepared me for an audacious achievement: sending underrepresented speakers from five continents to WordCamps through strategic partnerships. This initiative isn't just about sending speakers; it is about sharing diverse voices, expanding perspectives on leadership, and weaving a more vibrant, interconnected thread throughout the WordPress ecosystem and tech. Join me as I share tools for change that transformed my fear of outsider status into an innovative solution for global connection and inclusivity.
This talk is for anyone who has ever felt like they didn't quite belong, whether in an open source conference, slack channel, or within their own skin. By the end of this talk you will have insight on how to reshape belonging in your community to help any member find their true voice even while hiding from it.
Find more info about All Things Open:
On the web: https://www.allthingsopen.org/
Twitter: https://twitter.com/AllThingsOpen
LinkedIn: https://www.linkedin.com/company/all-things-open/
Instagram: https://www.instagram.com/allthingsopen/
Facebook: https://www.facebook.com/AllThingsOpen
Mastodon: https://mastodon.social/@allthingsopen
Threads: https://www.threads.net/@allthingsopen
2024 conference: https://2024.allthingsopen.org/
The Unseen, Underappreciated Security Work Your Maintainers May (or may not) ...All Things Open
Presented at All Things Open 2024
Presented by Seth Michael Larson - Python Software Foundation & Lauren Hanford - Tidelift
Title: The Unseen, Underappreciated Security Work Your Maintainers May (or may not) Already Be Doing
Abstract: urllib3 is a mission critical, 15-year-old python package. From a security perspective, urllib3 continues to lead the pack for Python packages in terms of implementing security standards like OpenSSF Scorecard, SLSA, and Trusted Publishers — adopting this new feature days after it was announced during PyCon US 2023. The team remediated two moderate-severity vulnerabilities in 2023 and made the fixes available in both the new v2.0 and security-fix only v1.26.x release streams.
Join the lead maintainer of urllib3 Seth Larson and Tidelift VP of product Lauren Hanford to discuss all of the security work happening in the best maintained projects that you can’t observe or measure, including avoiding leaked environment variables from their toolchain, limiting API token access, streamlining automated release processes, and more. Audience members will learn how they can do their part to ensure the projects they rely on follow these top practices.
Find more info about All Things Open:
On the web: https://www.allthingsopen.org/
Twitter: https://twitter.com/AllThingsOpen
LinkedIn: https://www.linkedin.com/company/all-things-open/
Instagram: https://www.instagram.com/allthingsopen/
Facebook: https://www.facebook.com/AllThingsOpen
Mastodon: https://mastodon.social/@allthingsopen
Threads: https://www.threads.net/@allthingsopen
2024 conference: https://2024.allthingsopen.org/
Integrating Diversity, Equity, and Inclusion into Product DesignAll Things Open
Presented at All Things Open 2024
Presented by Denitresse Ferrell - Culture Refinery
Title: Integrating Diversity, Equity, and Inclusion into Product Design
Abstract: How do you define diversity in product development? How do you ensure feedback from traditionally marginalized customer groups is not only heard, but acted upon? How do you balance between the needs of diverse subsets of users with those of the larger audience?
This keynote presentation dives deep into the critical role diversity plays in crafting successful products that resonate with everyone in your audience. With decades of multifaceted leadership experience in Fortune 100 companies, "Culture Whisperer" Denitresse Ferrell will take the All Things Open community on an exploration of the various dimensions of diversity in product development, from building inclusive teams to gathering and implementing diverse customer feedback.
At the conclusion of this session, the participants will be able to:
🔹Demystify Diversity: Unpack the concept of diversity in product development, going beyond race and gender to encompass a wide range of perspectives.
🔹Avoid Stereotypes at Scale: Learn how to safeguard against perpetuating stereotypes while personalizing user experiences.
🔹Harness the Power of ERGs: Consider how Employee Resource Groups (ERGs) can be leveraged to champion diversity within products and services.
🔹Move from Feedback to Action: Apply actionable strategies for ensuring diverse customer voices are heard, valued, and reflected in the final product.
Find more info about All Things Open:
On the web: https://www.allthingsopen.org/
Twitter: https://twitter.com/AllThingsOpen
LinkedIn: https://www.linkedin.com/company/all-things-open/
Instagram: https://www.instagram.com/allthingsopen/
Facebook: https://www.facebook.com/AllThingsOpen
Mastodon: https://mastodon.social/@allthingsopen
Threads: https://www.threads.net/@allthingsopen
2024 conference: https://2024.allthingsopen.org/
The Open Source Ecosystem for eBPF in KubernetesAll Things Open
Presented at All Things Open 2024
Presented by Andre Fredette, Ph.D. & Billy McFall - Red Hat
Title: The Open Source Ecosystem for eBPF in Kubernetes
Abstract: Kubernetes has become the de facto open source solution for orchestrating containerized applications. However, as the complexity and scale of deployments grow, traditional tools often fall short of providing the granularity and efficiency required by advanced applications. To meet the demand, applications are increasingly leveraging eBPF (extended Berkeley Packet Filters) due to the revolutionary kernel capabilities it enables.
This talk will explore the integration of the eBPF ecosystem with Kubernetes, highlighting its potential to transform how operators and developers observe, secure, and troubleshoot their deployments. We will start by introducing eBPF and its core concepts, including its architecture, programming model, and key benefits such as minimal overhead, improved visibility, and dynamic tracing capabilities. We will then review real-world examples of open source tools which leverage eBPF for networking, security, and observability in Kubernetes environments. We will also explore an open source project called bpfman (https://bpfman.io), an eBPF Manager focusing on simplifying the deployment, administration and visibility of eBPF programs in Kubernetes clusters.
This presentation is designed for Kubernetes operators, security professionals, and developers seeking to deepen their understanding of eBPF and its applications in cloud-native environments. No prior knowledge of eBPF is required, but familiarity with Kubernetes concepts and architecture will be beneficial.
Find more info about All Things Open:
On the web: https://www.allthingsopen.org/
Twitter: https://twitter.com/AllThingsOpen
LinkedIn: https://www.linkedin.com/company/all-things-open/
Instagram: https://www.instagram.com/allthingsopen/
Facebook: https://www.facebook.com/AllThingsOpen
Mastodon: https://mastodon.social/@allthingsopen
Threads: https://www.threads.net/@allthingsopen
2024 conference: https://2024.allthingsopen.org/
Open Source Privacy-Preserving Metrics - Sarah Gran & Brandon PitmanAll Things Open
Presented at All Things Open 2024
Presented by Sarah Gran & Brandon Pitman - Divvi Up
Title: Open Source Privacy-Preserving Metrics
Abstract: Telemetry and metrics collection can provide an enormous amount of useful information about applications and their users. From time-on-site to tracking software versions in crash reports, metrics enable informed engineering and business decisions. This type of information can also be used to feed AI and ML Large Language Models. But all that data sitting around can also be a liability when it can be pieced together to develop an increasingly robust understanding of an individual user. In today’s world that is rife with data thievery and data-driven bias, it’s time to explore how to have your cake and eat it too when it comes to metrics collection. We'll introduce you to set of novel privacy-preserving metrics collection protocols that are being developed in the IETF and deployed in Open Source repos at Divvi Up.
Find more info about All Things Open:
On the web: https://www.allthingsopen.org/
Twitter: https://twitter.com/AllThingsOpen
LinkedIn: https://www.linkedin.com/company/all-things-open/
Instagram: https://www.instagram.com/allthingsopen/
Facebook: https://www.facebook.com/AllThingsOpen
Mastodon: https://mastodon.social/@allthingsopen
Threads: https://www.threads.net/@allthingsopen
2024 conference: https://2024.allthingsopen.org/
Presented at All Things Open 2024
Presented by Craig St. Jean - Xebia
Title: Open-Source Low-Code
Abstract: As Low-Code becomes more and more prevalent, how does Open-Source fit into a world of proprietary Low-Code platforms? Are Low-Code and Open-Source completely incompatible, or are there synergies that we can adopt?
In this talk, I will discuss:
- The current Low-Code landscape
- Open-Source projects and communities built on Low-Code platforms
- How Low-Code and Open-Source benefit each other
At the end of this talk, you will better understand how Low-Code can fit into an Open-Source ecosystem, and how to get started!
Find more info about All Things Open:
On the web: https://www.allthingsopen.org/
Twitter: https://twitter.com/AllThingsOpen
LinkedIn: https://www.linkedin.com/company/all-things-open/
Instagram: https://www.instagram.com/allthingsopen/
Facebook: https://www.facebook.com/AllThingsOpen
Mastodon: https://mastodon.social/@allthingsopen
Threads: https://www.threads.net/@allthingsopen
2024 conference: https://2024.allthingsopen.org/
How I Learned to Stop Worrying about my Infrastructure and Love [Open]TofuAll Things Open
Presented at All Things Open 2024
Presented by Douglas Flagg - Fidelity Investments
Title: How I Learned to Stop Worrying about my Infrastructure and Love [Open]Tofu
Abstract: Every developer is worried about something breaking in their tech toolchain, so let Infrastructure as Code (IaC) be one thing you can stop worrying about and start to love again. Join us to learn about how you can focus more on consuming IaC APIs (and less on the ingredients that make them tasty) by cooking your infrastructure with Tofu. Douglas will demonstrate how to use OpenTofu from the simplest configurations to more complex deployments. And he’ll show how you can test that your Tofu IaC works as intended through the native testing language feature.
In this session you can expect to learn:
- The advantages of adopting OpenTofu
- How to use OpenTofu to manage IaC
- How to test that your Tofu configuration works as intended
Find more info about All Things Open:
On the web: https://www.allthingsopen.org/
Twitter: https://twitter.com/AllThingsOpen
LinkedIn: https://www.linkedin.com/company/all-things-open/
Instagram: https://www.instagram.com/allthingsopen/
Facebook: https://www.facebook.com/AllThingsOpen
Mastodon: https://mastodon.social/@allthingsopen
Threads: https://www.threads.net/@allthingsopen
2024 conference: https://2024.allthingsopen.org/
The Developers' Framework for Content CreationAll Things Open
Presented at All Things Open 2024
Presented by Gabriel L. Manor - Permit.io
Title: The Developers' Framework for Content Creation
Abstract: Content creation is an appealing task for developers, whether it's a blog, video, tutorial, or talk. Developers genuinely enjoy producing content. However, there are common challenges that often arise, such as: "What should I create?" and "When do you have time for it?"
Fortunately, the answer is not as complex as it may seem.
In this talk, I will share a clear and accessible framework designed for developers who aspire to embark on their content creation journey. I won't just provide theoretical words; I'll also share from my personal journey into content creation and developer marketing roles.
Find more info about All Things Open:
On the web: https://www.allthingsopen.org/
Twitter: https://twitter.com/AllThingsOpen
LinkedIn: https://www.linkedin.com/company/all-things-open/
Instagram: https://www.instagram.com/allthingsopen/
Facebook: https://www.facebook.com/AllThingsOpen
Mastodon: https://mastodon.social/@allthingsopen
Threads: https://www.threads.net/@allthingsopen
2024 conference: https://2024.allthingsopen.org/
TrsLabs - Fintech Product & Business ConsultingTrs Labs
Hybrid Growth Mandate Model with TrsLabs
Strategic Investments, Inorganic Growth, Business Model Pivoting are critical activities that business don't do/change everyday. In cases like this, it may benefit your business to choose a temporary external consultant.
An unbiased plan driven by clearcut deliverables, market dynamics and without the influence of your internal office equations empower business leaders to make right choices.
Getting things done within a budget within a timeframe is key to Growing Business - No matter whether you are a start-up or a big company
Talk to us & Unlock the competitive advantage
Artificial Intelligence is providing benefits in many areas of work within the heritage sector, from image analysis, to ideas generation, and new research tools. However, it is more critical than ever for people, with analogue intelligence, to ensure the integrity and ethical use of AI. Including real people can improve the use of AI by identifying potential biases, cross-checking results, refining workflows, and providing contextual relevance to AI-driven results.
News about the impact of AI often paints a rosy picture. In practice, there are many potential pitfalls. This presentation discusses these issues and looks at the role of analogue intelligence and analogue interfaces in providing the best results to our audiences. How do we deal with factually incorrect results? How do we get content generated that better reflects the diversity of our communities? What roles are there for physical, in-person experiences in the digital world?
Special Meetup Edition - TDX Bengaluru Meetup #52.pptxshyamraj55
We’re bringing the TDX energy to our community with 2 power-packed sessions:
🛠️ Workshop: MuleSoft for Agentforce
Explore the new version of our hands-on workshop featuring the latest Topic Center and API Catalog updates.
📄 Talk: Power Up Document Processing
Dive into smart automation with MuleSoft IDP, NLP, and Einstein AI for intelligent document workflows.
Book industry standards are evolving rapidly. In the first part of this session, we’ll share an overview of key developments from 2024 and the early months of 2025. Then, BookNet’s resident standards expert, Tom Richardson, and CEO, Lauren Stewart, have a forward-looking conversation about what’s next.
Link to recording, presentation slides, and accompanying resource: https://bnctechforum.ca/sessions/standardsgoals-for-2025-standards-certification-roundup/
Presented by BookNet Canada on May 6, 2025 with support from the Department of Canadian Heritage.
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptxAnoop Ashok
In today's fast-paced retail environment, efficiency is key. Every minute counts, and every penny matters. One tool that can significantly boost your store's efficiency is a well-executed planogram. These visual merchandising blueprints not only enhance store layouts but also save time and money in the process.
Big Data Analytics Quick Research Guide by Arthur MorganArthur Morgan
This is a Quick Research Guide (QRG).
QRGs include the following:
- A brief, high-level overview of the QRG topic.
- A milestone timeline for the QRG topic.
- Links to various free online resource materials to provide a deeper dive into the QRG topic.
- Conclusion and a recommendation for at least two books available in the SJPL system on the QRG topic.
QRGs planned for the series:
- Artificial Intelligence QRG
- Quantum Computing QRG
- Big Data Analytics QRG
- Spacecraft Guidance, Navigation & Control QRG (coming 2026)
- UK Home Computing & The Birth of ARM QRG (coming 2027)
Any questions or comments?
- Please contact Arthur Morgan at [email protected].
100% human made.
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep DiveScyllaDB
Want to learn practical tips for designing systems that can scale efficiently without compromising speed?
Join us for a workshop where we’ll address these challenges head-on and explore how to architect low-latency systems using Rust. During this free interactive workshop oriented for developers, engineers, and architects, we’ll cover how Rust’s unique language features and the Tokio async runtime enable high-performance application development.
As you explore key principles of designing low-latency systems with Rust, you will learn how to:
- Create and compile a real-world app with Rust
- Connect the application to ScyllaDB (NoSQL data store)
- Negotiate tradeoffs related to data modeling and querying
- Manage and monitor the database for consistently low latencies
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptxJustin Reock
Building 10x Organizations with Modern Productivity Metrics
10x developers may be a myth, but 10x organizations are very real, as proven by the influential study performed in the 1980s, ‘The Coding War Games.’
Right now, here in early 2025, we seem to be experiencing YAPP (Yet Another Productivity Philosophy), and that philosophy is converging on developer experience. It seems that with every new method we invent for the delivery of products, whether physical or virtual, we reinvent productivity philosophies to go alongside them.
But which of these approaches actually work? DORA? SPACE? DevEx? What should we invest in and create urgency behind today, so that we don’t find ourselves having the same discussion again in a decade?
What is Model Context Protocol(MCP) - The new technology for communication bw...Vishnu Singh Chundawat
The MCP (Model Context Protocol) is a framework designed to manage context and interaction within complex systems. This SlideShare presentation will provide a detailed overview of the MCP Model, its applications, and how it plays a crucial role in improving communication and decision-making in distributed systems. We will explore the key concepts behind the protocol, including the importance of context, data management, and how this model enhances system adaptability and responsiveness. Ideal for software developers, system architects, and IT professionals, this presentation will offer valuable insights into how the MCP Model can streamline workflows, improve efficiency, and create more intuitive systems for a wide range of use cases.
This is the keynote of the Into the Box conference, highlighting the release of the BoxLang JVM language, its key enhancements, and its vision for the future.
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...TrustArc
Most consumers believe they’re making informed decisions about their personal data—adjusting privacy settings, blocking trackers, and opting out where they can. However, our new research reveals that while awareness is high, taking meaningful action is still lacking. On the corporate side, many organizations report strong policies for managing third-party data and consumer consent yet fall short when it comes to consistency, accountability and transparency.
This session will explore the research findings from TrustArc’s Privacy Pulse Survey, examining consumer attitudes toward personal data collection and practical suggestions for corporate practices around purchasing third-party data.
Attendees will learn:
- Consumer awareness around data brokers and what consumers are doing to limit data collection
- How businesses assess third-party vendors and their consent management operations
- Where business preparedness needs improvement
- What these trends mean for the future of privacy governance and public trust
This discussion is essential for privacy, risk, and compliance professionals who want to ground their strategies in current data and prepare for what’s next in the privacy landscape.
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025BookNet Canada
Book industry standards are evolving rapidly. In the first part of this session, we’ll share an overview of key developments from 2024 and the early months of 2025. Then, BookNet’s resident standards expert, Tom Richardson, and CEO, Lauren Stewart, have a forward-looking conversation about what’s next.
Link to recording, transcript, and accompanying resource: https://bnctechforum.ca/sessions/standardsgoals-for-2025-standards-certification-roundup/
Presented by BookNet Canada on May 6, 2025 with support from the Department of Canadian Heritage.
5. Who You Are
• Know Javascript
• Already familiar with React
• Know a little bit about testing (vanilla Javascript,
another Javascript library/framework, or even in
another language)
• Want to write better software
6. How most devs actually test
(Look closely; she’s hitting CTRL-R over and over again.)
9. Benefits of Testing
Testing does …
➡ … help you focus on what’s important in the code
➡ … give you confidence that—if you change
something about the code—it still does the same
stuff it did before
Testing doesn’t …
➡ … prove that your code is “correct”
➡ … guarantee the absence of bugs.
10. Benefits of Testing
• Defensive driving doesn’t guarantee that you won’t
get in an accident.
• Wearing a seat belt doesn’t guarantee that you
won’t get hurt if you do have an accident.
That doesn’t mean you should not wear a seatbelt
or drive defensively.
11. “It is a profoundly erroneous truism, repeated
by all copy-books and by eminent people when
they are making speeches, that we should
cultivate the habit of thinking of what we are
doing. The precise opposite is the case.
Civilization advances by extending the number
of important operations which we can perform
without thinking about them. Operations of
thought are like cavalry charges in a battle —
they are strictly limited in number, they require
fresh horses, and must only be made at
decisive moments.”
–Alfred North Whitehead, An Introduction to Mathematics
12. Test-Driven Development
FAIL
PASSREFACTOR
1. Write Tests
2. Run Tests (TESTS FAIL)
3. Write Code to Make
Tests Pass
4. Run Tests (TESTS PASS)
5. Refactor (repeat until
you can’t think of
anything else to test)
13. Test-During Development
CODE
FAILPASS
1. Write Some Code
2. Write Some Tests
3. Run Tests (TESTS FAIL)
4. Write More Code
5. Run Tests (TESTS PASS)
6. Refactor (repeat until all
the features and tests
are done)
14. Kinds of automated testing
• Unit Testing
• Integration Testing
• Functional / Acceptance Testing
15. Kinds of automated testing
Unit
Integration
Functional
xUnit
Test Harness
Selenium
16. Kinds of automated testing
• Unit Testing
• Integration Testing
• Functional / Acceptance Testing
17. Why testing React is easy
React apps are meant to be
predictable,
and consequently they are eminently
testable.
18. React components ==
mathematical functions
y = mx +b
where
m is the slope of the line,
x is the x-coordinate,
b is the y-intercept
26. An aside: It’s still React,
though
So, we’re going to need a few basic building blocks
in order to:
• Compile JSX
• Transpile ES6 (if you want to use it)
• Bundle the libraries with your code
• Include React and ReactDOM (duh)
29. Test Frameworks
• Jasmine - mature, built-in assertions and spies
• Jest - wrapper around Jasmine for React
• Tape - straightforward, traditional paradigm
• Ava - built-in ES2015, concurrent test running
• Mocha - modular, allows (requires) separate
assertion and spy libraries
30. How to decide? Just ask?
https://twitter.com/housecor/status/717759300886618112
31. Test Frameworks
• Jasmine - mature, built-in assertions and spies
• Jest
• Tape - straightforward, traditional paradigm
• Ava - built-in ES2015, concurrent test running
• Mocha
npm install —save-dev mocha #(or) jest
33. Assertion Libraries
• Assert - built into Node, just require/import
• Expect - basic BDD style, similar to Jasmine
• Should - uber BDD style, bleeding edge
• Chai - can mimic any of the three libraries
• Power-Assert - concentrates on “truthy” values
• UnitJS - similar to Chai
34. Assertion Libraries
• Assert - built into Node, just require/import
• Expect - basic BDD style, similar to Jasmine
• Should - uber BDD style, bleeding edge
• Chai
• Power-Assert - concentrates on “truthy” values
• UnitJS - similar to Chai
npm install —save-dev chai
35. Options for a test DOM
• A real browser (Chrome, Firefox, Safari etc)
• PhantomJS (a “headless” browser)
• JSDom
Real browsers or PhantomJS will require some “glue”
in the form of something like Karma.
36. Options for a test DOM
• A real browser (Chrome, Firefox, Safari etc)
• PhantomJS (a “headless” browser)
• JSDom
npm install —save-dev jsdom
37. Helper Libraries
• React Test Utils - from Facebook, bare-bones
• React Shallow Testutils - some helper wrappers
• Enzyme - like jQuery, but for tests
• Sinon - spies, mocks, and stubs
45. Ex1: ES5
• React.createClass (ES5) style components
• Webpack/Babel compiles JSX to a static bundle
• Live Server serves and auto-refreshes the page
• No tests yet (Test-During Development)
48. Ex2: Mocha and
React Test Utils
• Mocha test framework
• JSDom
• React Test Utils (and a little Shallow Tests Utils)
• Chai’s expect function
• Sinon for function spies
49. Ex2: What changed in
the tooling
"scripts": {
// build stuff …
"test": "mocha --reporter spec test/helpers/testSetup.js
"test/**/*.test.js"",
"test:watch": "npm run test -- --watch"
},
"devDependencies": {
// other dependencies …
"chai": "^3.5.0",
"jsdom": "^9.5.0",
"mocha": "^3.0.2",
"react-addons-test-utils": "15.0.2",
"react-shallow-testutils": "^2.0.0",
"sinon": "^1.17.6",
}
ex2-mocha-react-test-utils/package.json (excerpt)
53. React Test Utils
• Replaces ReactDOM
• Can renderIntoDocument() or “shallow render”
• Functions to find rendered nodes (e.g.):
• scryRenderedDOMComponentsWithClass()
• findRenderedDOMComponentWithClass()
• Simulate() to fire DOM events
• Function to test nodes (e.g.):
• isElementOfType()
• isCompositeComponentWithType()
54. Ex2: What a Test Looks Like
var chai = require('chai');
var React= require('react');
var TestUtils = require('react-addons-test-utils');
var CastMember = require('../src/CastMember');
const expect = chai.expect;
function setup(props) {
let renderer = TestUtils.createRenderer();
renderer.render(<CastMember {...props}/>);
let output = renderer.getRenderOutput();
return {
props,
output,
renderer
};
}
ex2-mocha-react-test-utils/test/CastMember.test.js (part 1 of 3)
55. Ex2: What a Test Looks Like
describe('CastMember component', () => {
let props = {
member: {
id: 3,
name: 'Testy McTestface',
imageUrl: 'test-image.jpg',
thumbnailUrl: 'test-image-small.jpg',
bio: 'This is a test.'
}
};
it('should render a div with correct class', () => {
const {output} = setup(props);
expect(output.type).to.equal('div');
expect(output.props.className).to.equal('media');
});
ex2-mocha-react-test-utils/test/CastMember.test.js (part 2 of 3)
56. Ex2: What a Test Looks Like
it('should contain two child divs with appropriate classes', () => {
const {output} = setup(props);
const firstChild = output.props.children[0];
const secondChild = output.props.children[1];
expect(firstChild.type).to.equal('div');
expect(firstChild.props.className).to.equal('media-left');
expect(secondChild.type).to.equal('div');
expect(secondChild.props.className).to.equal('media-body');
});
it('should contain a heading element', () => {
const output = TestUtils.renderIntoDocument(<CastMember
{...props} />);
const titleElement =
TestUtils.findRenderedDOMComponentWithClass(output, 'media-heading');
expect(TestUtils.isDOMComponent(titleElement)).to.be.true;
});
});
ex2-mocha-react-test-utils/test/CastMember.test.js (part 3 of 3)
57. 99 Problems with React Test Utils
• Limited API
• Verbose function names
• Too subtle and obtuse
• What is scrying, anyway?
• Brittle and hard to pinpoint elements
• var loginBlock =
output.props.children.props.children[1]
.props.children[2].props.children;
// Wut?
58. Shallow Test Utils
// other imports…
var ShallowTestUtils = require('react-shallow-testutils');
var Header= require(‘../src/Header');
// other tests…
it('should render a nav with username and logout link if user
logged in', () => {
props.user = user;
var output = setup(props);
var navbarText = ShallowTestUtils.findWithClass(output,
'navbar-text');
var navbarLink = ShallowTestUtils.findWithClass(output,
'navbar-link');
expect(navbarText.props.children).to.equal('Welcome,
' + user.username);
expect(navbarLink.props.children).to.equal('Logout');
});
ex2-mocha-react-test-utils/test/Header.test.js (excerpt)
60. Enzyme
• Extends React Test Utils
• Can render a React DOM, shallow-render in
element, or render the final HTML DOM
• Has a ton of jQuery-like selectors and helpers
• <renderedOutput>.find(selector)
• <renderedOutput>.findWhere(fn)
• <renderedOutput>.text()
• <renderedOutput>..prop(key)
• and many, many more…
• https://github.com/airbnb/enzyme
63. Ex3: What a Test Looks Like
import React from 'react';
import { expect } from 'chai';
import { shallow, mount, render } from 'enzyme';
import sinon from 'sinon';
import Header from './Header';
describe('Header component', function() {
let props;
beforeEach(function() {
props = {
user: null,
login: function() {},
logout: function() {}
};
});
ex3-mocha-enzyme/src/Header/Header.test.js (excerpts, 1 of 4)
64. Ex3: What a Test Looks Like
it('should render the static component', function() {
// sanity-check test
// does it "render without exploding"?
// see: https://gist.github.com/thevangelist/
e2002bc6b9834def92d46e4d92f15874
const shallowOutput = shallow(<Header user={props.user}
login={props.loginAction} logout={props.logoutAction} />);
expect(shallowOutput).to.have.length(1);
});
// more tests
ex3-mocha-enzyme/src/Header/Header.test.js (excerpts, 2 of 4)
65. Ex3: What a Test Looks Like
describe('calling the appropriate action props', function() {
let loginAction;
let logoutAction;
beforeEach(function() {
loginAction = sinon.spy();
logoutAction = sinon.spy();
props.loginAction = loginAction;
props.logoutAction = logoutAction;
});
ex3-mocha-enzyme/src/Header/Header.test.js (excerpts, 3 of 4)
66. Ex3: What a Test Looks Like
it('should call login function if no authenticated use', function() {
const shallowOutput = shallow(<Header user={props.user}
login={props.loginAction} logout={props.logoutAction} />);
const authLink = shallowOutput.find('.login-block .navbar-link');
authLink.simulate('click');
expect(loginAction.calledOnce).to.be.true;
});
it('should call logout function when there is an authenticated user',
function() {
props.user = {
id: 3,
username: 'gmtester'
};
const shallowOutput = shallow(<Header user={props.user}
login={props.loginAction} logout={props.logoutAction} />);
const authLink = shallowOutput.find('.login-block .navbar-link');
authLink.simulate('click')
expect(logoutAction.calledOnce).to.be.true;
});
});
ex3-mocha-enzyme/src/Header/Header.test.js (excerpts, 3 of 4)
70. Before / After
Jest-pocalype
• Auto-mocking on by
default
• Optimized inside
Facebook, but not by
default in open source
setup
• Slow
< v15.0 v15.0+
• Auto-mocking off by
default
• New commitment to
community
• Snapshot testing (v14)
• Fast
71. Ex5: Mocha and
Jest
• Jest test framework
• JSDom (included with Jest)
• expect function (included with Jasmine2, which is
included with Jest)
• Spies (that’s right, included with Jasmine2, which is
included with Jest)
73. Ex5: What a Test Looks Like
import React from 'react';
import renderer from 'react-test-renderer';
import CastMember from '../src/Cast/CastMember';
test('CastMember rendered static HTML', () => {
const props = {
member: {
id: 3,
name: 'Testy McTestFace',
imageUrl: 'test-image.jpg',
thumbnailUrl: 'test-image-small.jpg',
bio: 'This is a test.'
}
};
ex5-jest/__tests__/CastMember.test.js (part 1 of 2)
74. Ex5: What a Test Looks Like
const component = renderer.create(
<CastMember {...props} />
);
let tree = component.toJSON();
expect(tree).toMatchSnapshot();
});
ex5-jest/__tests__/CastMember.test.js (part 2 of 2)
75. One big advantage for Jest
Jest comes set up when you create a
React app with
create-react-app,
Facebook’s React generator
76. Ex6: Mocha Enzyme, ES6,
and React-Router
• Mocha test framework
• JSDom
• Enzyme
• Chai’s expect function
• Sinon for function spies
• React-Router
79. Ex6: What a Test Looks Like
import React from 'react';
import { expect } from 'chai';
import { shallow, mount } from 'enzyme';
import sinon from 'sinon';
import BuyTicketsPage from './BuyTicketsPage';
import SeatingChart from './Seating/SeatingChart';
import TicketForm from './TicketForm';
import mockSeatData from '../../test/fixtures/mockSeatData';
describe('BuyTicketsPage component', function() {
let routeObject;
beforeEach(function() {
routeObject = {
initialSeatData: []
};
});
ex6-mocha-enzyme-es6-react-router/src/Tickets/BuyTicketsPage.test.js (excerpts, 1 of 6)
80. Ex6: What a Test Looks Like
describe('rendering', function() {
it('should render the component (smoke test)', function() {
const shallowOutput = shallow(<BuyTicketsPage
route={routeObject} />);
expect(shallowOutput).to.have.length(1);
});
it('should render an element with correct classes',
function() {
const shallowOutput = shallow(<BuyTicketsPage
route={routeObject} />);
expect(shallowOutput.hasClass('text-center')).to.be.true;
});
});
//…
ex6-mocha-enzyme-es6-react-router/src/Tickets/BuyTicketsPage.test.js (excerpts, 2 of 6)
81. Ex6: What a Test Looks Like
describe('BuyTicketsPage component actions', function() {
it('should handle a form submission from its TicketForm
component (manual test)', function() {
routeObject.initialSeatData =
JSON.parse(JSON.stringify(mockSeatData));
const buyTicketsPage = mount(<BuyTicketsPage
route={routeObject} />);
// manually set the state of selected seats and the
package to buy
let seatsToSelect =
routeObject.initialSeatData[2].slice(0, 2);
seatsToSelect[0].selected = true;
seatsToSelect[1].selected = true;
ex6-mocha-enzyme-es6-react-router/src/Tickets/BuyTicketsPage.test.js (excerpts, 3 of 6)
82. Ex6: What a Test Looks Like
buyTicketsPage.setState({
ticketPackage: {
seats: seatsToSelect
}
});
const ticketForm = buyTicketsPage.find('.ticket-form');
ticketForm.simulate('submit');
const seatArray = buyTicketsPage.state('seatData');
const ticketPackage =
buyTicketsPage.state('ticketPackage');
expect(seatArray[2][0].sold).to.be.true;
expect(seatArray[2][1].sold).to.be.true;
expect(ticketPackage.seats).to.have.lengthOf(0);
});
ex6-mocha-enzyme-es6-react-router/src/Tickets/BuyTicketsPage.test.js (excerpts, 4 of 6)
83. Ex6: What a Test Looks Like
it('should handle a form submission from its TicketForm
component (automatic test)', function() {
routeObject.initialSeatData =
JSON.parse(JSON.stringify(mockSeatData));
const buyTicketsPage = mount(<BuyTicketsPage
route={routeObject} />);
// automatically set the state of selected seats and the
package to buy
const pageInstance = buyTicketsPage.instance();
pageInstance.updateSeatStatus('C1');
pageInstance.updateSeatStatus('C2');
ex6-mocha-enzyme-es6-react-router/src/Tickets/BuyTicketsPage.test.js (excerpts, 5 of 6)
84. Ex6: What a Test Looks Like
const ticketForm = buyTicketsPage.find('.ticket-form');
ticketForm.simulate('submit');
const seatArray = buyTicketsPage.state('seatData');
const ticketPackage =
buyTicketsPage.state('ticketPackage');
expect(seatArray[2][0].sold).to.be.true;
expect(seatArray[2][1].sold).to.be.true;
expect(ticketPackage.seats).to.have.lengthOf(0);
});
ex6-mocha-enzyme-es6-react-router/src/Tickets/BuyTicketsPage.test.js (excerpts, 6 of 6)
85. Ex7: Mocha Enzyme, ES6,
React-Router, and Redux
• Mocha test framework
• JSDom
• Enzyme
• Chai’s expect function
• Sinon for function spies
• React-Router
• Redux
87. Ex7: What a Test Looks Like
import { expect } from 'chai';
import seatReducer from './seatReducer';
import * as actions from '../actions/seatActions';
import mockSeatData from '../../test/fixtures/mockSeatData';
import * as types from '../actions/actionTypes';
describe('Seat reducer', function() {
let seats;
beforeEach(function() {
seats = JSON.parse(JSON.stringify(mockSeatData));
});
it('should load seats', function() {
const initialState = [];
const action = actions.loadSeats(seats);
const newState = seatReducer(initialState, action);
const expectedSeats = JSON.parse(JSON.stringify(mockSeatData));
expect(newState).to.equal(seats);
});
ex7-mocha-enzyme-es6-react-router-redux/src/reducers/seatReducer.test.js (part 1 of 3)
88. Ex7: What a Test Looks Like
it('should mark a seat as selected', function() {
const initialState = seats;
const seat = initialState[0][2]; // mock seat A3
const expectedState =
JSON.parse(JSON.stringify(initialState));
expectedState[0][2].selected = true;
const action = actions.toggleSeatSelected(seat);
const newState = seatReducer(initialState, action);
// .eql instead of .equal,
// to compare the contents, instead of the reference
expect(newState).to.eql(expectedState);
});
ex7-mocha-enzyme-es6-react-router-redux/src/reducers/seatReducer.test.js (part 2 of 3)
89. Ex7: What a Test Looks Like
it('should mark a seat as sold', function() {
const initialState = seats;
const seat = seats[0][2]; // mock seat A3
seat.selected = true;
const expectedState = JSON.parse(JSON.stringify(seats));
expectedState[0][2].sold = true;
expectedState[0][2].selected = false;
const action = actions.markSeatSold(seat);
const newState = seatReducer(initialState, action);
// .eql instead of .equal,
// to compare the contents, instead of the reference
expect(newState).to.eql(expectedState);
});
});
ex7-mocha-enzyme-es6-react-router-redux/src/reducers/seatReducer.test.js (part 3 of 3)
90. Ex7: The Code Under Test
import * as types from '../actions/actionTypes';
import initialState from './initialState';
export default function seatReducer(state = initialState.seats,
action) {
let newState;
switch(action.type) {
case types.LOAD_SEATS:
return action.seats;
break;
ex7-mocha-enzyme-es6-react-router-redux/src/reducers/seatReducer.js (part 1 of 3)
91. Ex7: The Code Under Test
case types.TOGGLE_SEAT_SELECTED:
newState = state.map((row) => {
return row.map((seat) => {
if (seat.seatNumber === action.seat.seatNumber) {
const updatedSeat = Object.assign({}, seat);
updatedSeat.selected = !updatedSeat.selected;
return updatedSeat;
} else {
return seat;
}
});
});
return newState;
break;
ex7-mocha-enzyme-es6-react-router-redux/src/reducers/seatReducer.js (part 2 of 3)
92. Ex7: The Code Under Test
case types.MARK_SEAT_SOLD:
newState = state.map((row) => {
return row.map((seat) => {
if (seat.seatNumber === action.seat.seatNumber) {
const updatedSeat = Object.assign({}, seat);
updatedSeat.selected = false;
updatedSeat.sold = true;
return updatedSeat;
} else {
return seat;
}
});
});
return newState;
break;
default:
return state;
}
}
ex7-mocha-enzyme-es6-react-router-redux/src/reducers/seatReducer.js (part 3 of 3)