42
Testing 2 Applications Photos by McGinity Photo Matt Raible @mraible

Testing Angular 2 Applications - Rich Web 2016

Embed Size (px)

Citation preview

Page 1: Testing Angular 2 Applications - Rich Web 2016

Testing 2 Applications

Photos by McGinity Photo

Matt Raible • @mraible

Page 2: Testing Angular 2 Applications - Rich Web 2016

Blogger on raibledesigns.com

UI Architect and Java Champion

Father, Skier, Mountain Biker, Whitewater Rafter

Web Framework Connoisseur

Who is Matt Raible?

Bus LoverStormpath Developer Evangelist

Page 3: Testing Angular 2 Applications - Rich Web 2016

What about YOU?

How long have you been doing web development?

Do you like JavaScript? TypeScript?

What’s your favorite JavaScript framework?

Why are you here?

Page 4: Testing Angular 2 Applications - Rich Web 2016

Quality

“A person who knows how to fix motorcycles—with Quality—is less likely to run short of friends than one who doesn't. And they aren't going to see him as some kind of object either. Quality destroys

objectivity every time.”

— Zen and the Art of Motorcycle Maintenance

Page 5: Testing Angular 2 Applications - Rich Web 2016

Software Testing

With motorcycles, you drive to test them.

With software, you can test it without driving it.

Or rather, you can automate the driving.

If you don’t automate tests, you’re still testing!

Page 6: Testing Angular 2 Applications - Rich Web 2016

Hello World with AngularJS<!doctype html> <html ng-app> <head> <title>Hello World</title> </head> <body> <div> <label>Name:</label> <input type="text" ng-model="name" placeholder="Enter a name here"> <hr> <h1>Hello {{name}}!</h1> </div> <script src="http://code.angularjs.org/1.5.8/angular.min.js"></script> </body> </html>

Page 7: Testing Angular 2 Applications - Rich Web 2016
Page 8: Testing Angular 2 Applications - Rich Web 2016

Hello World with Angular 2<html> <head> <title>Angular 2 QuickStart</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="styles.css"> <!-- 1. Load libraries --> <!-- Polyfills, for older browsers --> <script src="node_modules/core-js/client/shim.min.js"></script>

<script src="node_modules/zone.js/dist/zone.js"></script> <script src="node_modules/reflect-metadata/Reflect.js"></script> <script src="node_modules/systemjs/dist/system.src.js"></script>

</head> </html>

Page 9: Testing Angular 2 Applications - Rich Web 2016

Hello World with Angular 2 <!-- 2. Configure SystemJS --> <script> System.config({ packages: { app: { format: 'register', defaultExtension: 'js' } } }); System.import('app/main') .then(null, console.error.bind(console)); </script> </head> <!-- 3. Display the application --> <body> <my-app>Loading...</my-app> </body> </html>

Page 10: Testing Angular 2 Applications - Rich Web 2016

app/main.ts

import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { AppComponent } from './app.component';

platformBrowserDynamic().bootstrapModule(AppComponent);

Page 11: Testing Angular 2 Applications - Rich Web 2016

app/app.component.ts

import { Component } from '@angular/core';

@Component({ selector: 'my-app', template: '<h1>My First Angular 2 App</h1>' }) export class AppComponent { }

Page 12: Testing Angular 2 Applications - Rich Web 2016

Angular 2 QuickStart

Page 13: Testing Angular 2 Applications - Rich Web 2016

Easiest ways to get startedAngular 2 QuickStart

https://github.com/angular/quickstart

Angular 2 (and beyond) Seed

https://github.com/mgechev/angular-seed

Angular CLI

https://github.com/angular/angular-cli

Page 14: Testing Angular 2 Applications - Rich Web 2016
Page 15: Testing Angular 2 Applications - Rich Web 2016
Page 16: Testing Angular 2 Applications - Rich Web 2016
Page 17: Testing Angular 2 Applications - Rich Web 2016

Let’s take a look at a few things…Angular CLI

TypeScript

Unit Tests

Integration Tests

Continuous Integration

Deployment

Page 19: Testing Angular 2 Applications - Rich Web 2016

Angular CLInpm install -g angular-cli

ng new ng2-demo

cd ng2-demo

ng serve

ng test

ng e2e

ng g component

ng g service

ng build

ng --help

Page 20: Testing Angular 2 Applications - Rich Web 2016

ES6, ES7 and TypeScript

TSES7 ES6 ES5

ES5: es5.github.io

ES6: git.io/es6features

ES7: DRAFT

TS: www.typescriptlang.org

Page 22: Testing Angular 2 Applications - Rich Web 2016

TypeScript$ npm install -g typescript

function greeter(person: string) { return "Hello, " + person;} var user = "Jane User"; document.body.innerHTML = greeter(user);

$ tsc greeter.ts

https://www.typescriptlang.org/docs/tutorial.html

Page 23: Testing Angular 2 Applications - Rich Web 2016

bus.ts

Page 24: Testing Angular 2 Applications - Rich Web 2016

Types of Tests

Unit Tests

End-to-End Tests

Page 25: Testing Angular 2 Applications - Rich Web 2016

Unit Test Example

Page 26: Testing Angular 2 Applications - Rich Web 2016

bus.spec.ts

Page 27: Testing Angular 2 Applications - Rich Web 2016

Demo Time!

Page 28: Testing Angular 2 Applications - Rich Web 2016

What you learned

How to…

Unit test Angular 2 services, mocking Http provider

Unit test Angular 2 components, mocking service

Integration test Angular 2 application

Continuously test and deploy with a CI server

Page 29: Testing Angular 2 Applications - Rich Web 2016

Learn more about Angular CLI

https://www.youtube.com/watch?v=obbdFFbjLIU

Page 30: Testing Angular 2 Applications - Rich Web 2016

Style Guides

Angular 2 Official Style Guide

https://angular.io/styleguide

John Papa’s AngularJS Style Guide

https://github.com/johnpapa/angular-styleguide

Page 31: Testing Angular 2 Applications - Rich Web 2016

ng-book 2

A comprehensive guide to developing with Angular 2

Sample apps: Reddit clone, Chat with RxJS Observables, YouTube search-as-you-type, Spotify Search

How to write components, use forms and APIs

Over 5,500+ lines of code!

Page 32: Testing Angular 2 Applications - Rich Web 2016

Testing Angular 2 Applications Book

Unit testing directives, pipes, services, and routes

End-to-end testing with elements and forms

4 of 10 chapters available

Estimated publication: Spring 2017

Page 34: Testing Angular 2 Applications - Rich Web 2016

Don’t be afraid of testing!

Page 35: Testing Angular 2 Applications - Rich Web 2016

Don’t be afraid of testing!

Page 36: Testing Angular 2 Applications - Rich Web 2016

Don’t be afraid of testing!

Page 37: Testing Angular 2 Applications - Rich Web 2016

Stormpath SDK for Angular 2

Page 38: Testing Angular 2 Applications - Rich Web 2016

Lessons Learned at Stormpath

generator-angular-library is a great tool

npm install -g yo generator-angular-library

yo angular-library

Override templates in components with ngOutletTemplate

Write lots of tests and demos that use your library

Page 39: Testing Angular 2 Applications - Rich Web 2016
Page 40: Testing Angular 2 Applications - Rich Web 2016

ResourcesDemo Code

https://github.com/mraible/ng2-demo

Step-by-step Tutorial

http://gist.asciidoctor.org/?github-mraible/ng2-demo//README.adoc

Page 41: Testing Angular 2 Applications - Rich Web 2016

Contact Me! raibledesigns.com

@mraible

linkedin.com/in/mraible

Presentationsslideshare.net/mraible

Codegithub.com/mraible

Questions?

Page 42: Testing Angular 2 Applications - Rich Web 2016

When will Angular 3 be released?