Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Jasmine

13,037 views

Published on

Lightning talk from FESuffolk

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Jasmine

  1. 1. Javascript issoftware too!(so where are the unit tests?) Kerry Buckley — @kerryb FESuffolk lightning talk 25 March 2013
  2. 2. http://www.flickr.com/photos/saparevo/4948914064
  3. 3. http://www.flickr.com/photos/igormazic/299854107
  4. 4. UT No Yes ut/) No [107] (http://lbrtw.com/javascript-unit- Developed as a learning project test-framework-part-1) JSUnit Yes No Yes No [108] (http://www.jsunit.net/) JSUnit is no longer actively maintain Enhance JS Yes ed No Yes No [10 6] QUnit Port of Enhance PHP Yes Yes [109] (http://qunitjs.com/) jQuery test harness RhUnit [110] Yes Yes (http://www.iankent.co.uk/rhunit/) QUnit compatible Rhino/JUnit framew Crosscheck ork No Yes [10 7] J3Unit Browserless java-based framework Yes No [111] (http://j3unit.sourceforge.net/) Mocha No Yes [112] Yes Yes (http://visionmedia.github.com/moch JSNUnit a/) Yes No [10 8] YUI Test Yes Yes Yes Yes [10 9] JSSpec Yes No [11 0] UnitTesting Behaviour-driven development framew Yes ork No [11 1] script.aculo.us javascript test harness JSpec [113] Yes Yes Highly readable BDD, 50+ matchers (http://visionmedia.github.com/jspec) , DOM / framework independent, async, rhino, node.js support and mo re (no longer maintained) Jasmine [114] BDD, framework independent, easy Yes Yes integration with Ruby projects (http://pivotal.github.com/jasmine) and continuous builds. Allows for bot h DOM-less testing and screw-unit asynchronous testing. Yes No [11 2] Requires jQuery Test.Simple No[11 3] Yes Yes No [11 4] Write TAP-emitting unit tests in JavaSc ript and run them in your browser. Test.More No[1] Yes Yes No [11 5] Write TAP-emitting unit tests in JavaSc ript and run them in your TestCase browser. Yes No [11 6] TestIt Yes Yes [11 7] jsUnitTest Light-weight, non-polluting, and eas Yes y to set up and use Yes[11 8] JSTest Based on TestCase but without the Pro Yes totype dependency No [11 9] Light-weight, non-polluting browser-b JSTest.NET ased framework No Yes [115] (http://jstest.codeplex.com) Browserless JavaScript unit test runner for use with MsTest, XUnit, jsUnity Yes NUnit, etc. No Yes Yes [116] (http://jsunity.com/)RhinoUnit Context-agnostic (JavaScript, JScript No Yes [12 0] (ASP/WSH), Rhino, etc.) Rhino-based framework that allows testJasUnit s to be run in Ant Yes No Yes No [12 1] Light-weight framework. Part of a pro ject that provides Mocks and IoC.)FireUnit Yes No [117] (http://fireunit.org/) Testing framework that provides loggin g and viewing within a new tab of Firebug.Js-test-driver Yes Yes No [12 2] The goal of JsTestDriver is to build a JavaSc
  5. 5. describe "2 + 2", -> it "is 4", -> expect(2 + 2).toEqual 4describe("2 + 2", function() { it("should be 4", function() { expect(2 + 2).toEqual(4); });});
  6. 6. $ jasmine-headless-webkit -cRunning Jasmine specs....PASS: 1 test, 0 failures, 0.003 secs.Test ordering seed: --seed 2026
  7. 7. encrypt = -> plainText = $("#plain-text").val() $.get "/encrypt", {text: plainText}, updateupdate = (data) -> $("#encrypted-text").val data.text$ -> $("#plain-text").keyup encrypt
  8. 8. source "https://rubygems.org"...group :development, :test do ... gem "jasmine-headless-webkit" gem "jasmine-spec-extras"end
  9. 9. src_files: - ["application.js"]helpers: - helpers/**/*spec_files: - "**/*[Ss]pec.*"src_dir:- app/assets/javascripts- vendor/assets/javascriptsspec_dir: spec/javascripts
  10. 10. describe "Encryptor", -> beforeEach -> loadFixtures "encryptor.html" describe ".update", -> ...<input id="plain-text" /><input id="encrypted-text" />
  11. 11. describe "Encryptor", -> beforeEach -> loadFixtures "encryptor.html" describe ".update", -> it "sets the #encrypted-text elements value to the supplied datas text attribute", -> update {text: "foo"} expect($("#encrypted-text").val()).toEqual "foo"
  12. 12. Running Jasmine specs...FFAIL: 1 test, 1 failure, 0.003 secs.Encryptor .update sets the #encrypted-textelements value to the supplied datas textattribute. (...spec/javascripts/encryptor_spec.coffee:3) ReferenceError: Cant find variable: update
  13. 13. // Generated by CoffeeScript 1.6.1(function() { var encrypt, update; encrypt = function() { var plainText; plainText = $("#plain-text").val(); return $.get("/encrypt", { text: plainText }, update); }; update = function(data) { return $("#encrypted-text").val(data.text); }; $(function() { return $("#plain-text").keyup(encrypt); });}).call(this);
  14. 14. class Encryptor constructor: -> $("#plain-text").keyup @encrypt encrypt: => plainText = $("#plain-text").val() $.get "/encrypt", {text: plainText}, @update update: (data) => $("#encrypted-text").val data.text$ -> window.encryptor = new Encryptor
  15. 15. describe ".encrypt", -> it "requests encryption of the #plain-text field, calling .update on success", -> $("#plain-text").val "foo" spyOn $, "get" window.encryptor.encrypt() expect($.get).toHaveBeenCalledWith "/encrypt", {text: "foo"}, window.encryptor.update
  16. 16. someObject = {doSomething: ->}describe "an easy mistake to make", -> it "catches me out all the time", -> spyOn someObject, "doSomething" # Should fail – Im not calling doSomething expect(someObject.doSomething).toHaveBeenCalledRunning Jasmine specs....PASS: 1 test, 0 failures, 0.004 secs.Test ordering seed: --seed 7220
  17. 17. Tuesday 2 April, 7pm The Brewery Tap

×