Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Client Side Testing
Search
Andrew Best
May 26, 2015
Programming
0
71
Client Side Testing
A quick trip around javascript and Angular unit testing using Jasmine and Chutzpah.
Andrew Best
May 26, 2015
Tweet
Share
More Decks by Andrew Best
See All by Andrew Best
The Surprising Truths Behind Good Mentoring
andrewabest
0
86
Learn Authentication The Hard Way
andrewabest
0
340
Finding The Sweet Spot BNE
andrewabest
1
240
Finding The Sweet Spot
andrewabest
0
450
Automating AWS
andrewabest
2
370
Conventional Wisdom
andrewabest
1
450
DSC a-b-c's
andrewabest
0
140
AWS a-b-c's
andrewabest
3
160
What is Git?
andrewabest
0
220
Other Decks in Programming
See All in Programming
Rediscover the Console - SymfonyCon Amsterdam 2025
chalasr
2
160
エディターってAIで操作できるんだぜ
kis9a
0
720
ハイパーメディア駆動アプリケーションとIslandアーキテクチャ: htmxによるWebアプリケーション開発と動的UIの局所的適用
nowaki28
0
420
Navigation 3: 적응형 UI를 위한 앱 탐색
fornewid
1
320
TypeScriptで設計する 堅牢さとUXを両立した非同期ワークフローの実現
moeka__c
6
3k
S3 VectorsとStrands Agentsを利用したAgentic RAGシステムの構築
tosuri13
6
310
【CA.ai #3】Google ADKを活用したAI Agent開発と運用知見
harappa80
0
310
令和最新版Android Studioで化石デバイス向けアプリを作る
arkw
0
400
Building AI Agents with TypeScript #TSKaigiHokuriku
izumin5210
6
1.3k
30分でDoctrineの仕組みと使い方を完全にマスターする / phpconkagawa 2025 Doctrine
ttskch
4
840
非同期処理の迷宮を抜ける: 初学者がつまづく構造的な原因
pd1xx
1
710
DSPy Meetup Tokyo #1 - はじめてのDSPy
masahiro_nishimi
1
170
Featured
See All Featured
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.8k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
1k
Unsuck your backbone
ammeep
671
58k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.8k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
A designer walks into a library…
pauljervisheath
210
24k
How to Ace a Technical Interview
jacobian
280
24k
The Invisible Side of Design
smashingmag
302
51k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
The Language of Interfaces
destraynor
162
25k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Transcript
Testing the web with Chutzpah and Jasmine
Page “I’m a c# guy that uses NUnit” › In
the javascriptworld, Jasmine is your NUnitequivalent. (http://jasmine.github.io/) › In Jasmine, you create ‘Suites’ that describe a set of expectations you have for the thing you want to test. › Jasmine also allows you to also set your expectations within these suites. / Copyright ©2014 by Readify Pty Ltd 2
Page So how do I do X in Jasmine? ›
Setup and teardown: › Ignore tests: / Copyright ©2014 by Readify Pty Ltd 3
Page Cool, now how do I run my tests? ›
Chutzpah! (https://github.com/mmanela/chutzpah) › Chutzpah generates html to run our specs with Jasmine in a headless browser (phantomjs). › It will also generate html to run our specs in our browser of choice (handy for debugging tests!) › It also takes care of loading dependencies for us where needed. / Copyright ©2014 by Readify Pty Ltd 4
Page So how to we hook it all up? ›
Install-Package Chutzpah › Install the Chutzpah VS Extensions › Add and configure your chutzpah.json › Don’t worry about installing Jasmine! Chutzpah bundles it up for you › Write your hello world unit test! / Copyright ©2014 by Readify Pty Ltd 5
Page Man this thing is busted! › Chutzpah is a
bit of a black box when used from VS – if it doesn’t seem to be working from VS, you can always use the command line runner. › Running chutzpah.console.exe {fullpathtofile.js} /trace will give you a detailed log of the test run named chutzpah.log alongside the console exe (in your packages folder) / Copyright ©2014 by Readify Pty Ltd 6
Page Okay cool, now how about Ng? › To test
an Ng app, because of how angular’smodule / DI system works, we need to make sure we include all necessary references to the applications scripts in our chutzpah.json › If you have a bunch of bootstrapping activity in your standard app.js, you may want to craft a slimmed down version for testing / Copyright ©2014 by Readify Pty Ltd 7
Page Dude, where’s my Mocks? › ngMock(https://docs.angularjs.org/api/ngMock) › Injects and
mocks most of the core angular services for us, such as $http and $log › It *must* be loaded by Chutzpah after angular.js (it overrides default behaviour) › No further wireuprequired! › Jasmine also provides some mocking functions similar to NSubstitute / Copyright ©2014 by Readify Pty Ltd 8
Page Example Ng Test / Copyright ©2014 by Readify Pty
Ltd 9 describe("Landing Page Directive", function() { var $sut; describe('If form is started', function() { var goToDashboardCalled = false; beforeEach(function() { module(function($provide) { $provide.service('utilityService', function() { return { goToDashboard: function() { goToDashboardCalled = true; } } }); }); inject(function($compile, $rootScope, $httpBackend) { $httpBackend.expectPOST('apiBaseUrlforms/getbasicformdetails').respond(200); $rootScope.formStarted = true; var elem = angular.element("<div landing-page></div>"); $sut = $compile(elem)($rootScope); $rootScope.$digest(); }); }); it('Redirects to the dashboard.', function() { expect(goToDashboardCalled).toBe(true); }); }); });
Page Hey what were those things? › Module: allows us
to replace services to be injected into our class under test. This allows us to mockother things out. › Inject: allows us to mutate mocked dependencies to set them up for our SUT, and also supply them when building our SUT. › These are both given to us via ngMock, and for ease of use are attached to the window object for us. / Copyright ©2014 by Readify Pty Ltd 10
Page Ng testing gotchas › Http interactions *must* be mocked.
› You can only set up dependencies via Module() before your call to Inject(). If you call it after… BOOM. › If something doesn’t seem to be working, remember to double check your chutzpah.jsonand the html generated by Chutzpah for script errors! / Copyright ©2014 by Readify Pty Ltd 11
Page Staying DRY › So you have a bunch of
code you want to run before every test? Sick of copy pasta? › Jasmine allows us to define a spec-helper.js file which can include global beforeEvery and afterEvery functions! › This can be a useful place to bootstrap things like Ng constants, if you have some. / Copyright ©2014 by Readify Pty Ltd 12
Page Bonus slide: CI › So now I have my
tests, how do I plug them into my CI pipeline? › Use the Chutzpah console exe that you checked in with your chutzpah package because you are a good developer and detest package restore. › And it goes a little something like this… / Copyright ©2014 by Readify Pty Ltd 13
None