Jasmine公式サイトのチュートリアルのCoffeeScript版（作り途中）

```coffeescript
describe "A suite", ->
  it "contains spec with an expectation", ->
    expect(true).toBe true

describe "A suite is just a function", ->
  it "and so is a spec", ->
    a = true
    expect(a).toBe true

describe "The 'tobe' matcher compares with ===", ->
  it "and has a positive case", ->
    expect(true).toBe true

  it "and can have a negative case", ->
    expect(false).not.toBe true

describe "Included matchers:", ->
  it "The 'toBe' matcher compares with ===", ->
    a = 12
    b = a
    expect(a).toBe b
    expect(a).not.toBe null

  describe "The 'toEqual' matcher", ->
    it "works for simple literals and variables", ->
      a = 12
      expect(a).toEqual 12
    it "should work for objects", ->
      foo =
        a: 12
        b: 34
      bar =
        a: 12
        b: 34
      expect(foo).toEqual bar

  it "The 'toMatch' matcher is for regular expressions", ->
    message = 'foo bar baz'
    expect(message).toMatch /bar/
    expect(message).toMatch 'bar'
    expect(message).not.toMatch /quux/

  it "The 'toBeDefined' matcher compares against 'undefined'", ->
    a =
      foo: 'foo'
    expect(a.foo).toBeDefined()
    expect(a.bar).not.toBeDefined()

  it "The 'toBeUndefined' matcher compares against 'undefined'", ->
    a =
      foo: 'foo'
    expect(a.foo).not.toBeUndefined()
    expect(a.bar).toBeUndefined()

  it "The 'toBeNull' matcher compares against null", ->
    a = null
    foo = 'foo'
    expect(null).toBeNull()
    expect(a).toBeNull()
    expect(foo).not.toBeNull()

  it "The 'toBeTruthy' matcher is for boolean casting testing", ->
    a = false
    foo = 'foo'
    expect(foo).toBeTruthy()
    expect(a).not.toBeTruthy()

  it "The 'toBeFalsy' matcher is for boolean casting testing", ->
    a = false
    foo = 'foo'
    expect(a).toBeFalsy()
    expect(foo).not.toBeFalsy()

  it "The 'toContain' matcher is for finding an item in an Array", ->
    a = ['foo', 'bar', 'baz']
    expect(a).toContain 'bar'
    expect(a).not.toContain 'quux'

  it "The 'toBeLessThan' matcher is for mathematical comparisons", ->
    pi = 3.1415926
    e = 2.78
    expect(e).toBeLessThan pi
    expect(pi).not.toBeLessThan e

  it "The 'toBeGreaterThan' is for mathematical comparisons", ->
    pi = 3.1415926
    e = 2.78
    expect(pi).toBeGreaterThan e
    expect(e).not.toBeGreaterThan pi

  it "The 'toBeCloseTo' matcher is for precision math comparison", ->
    # Matcher that checks that the expected item is equal to the actual item
    # up to a given level of decimal precision (default 2).
    pi = 3.1415926
    e = 2.78
    expect(pi).not.toBeCloseTo e, 2
    expect(pi).toBeCloseTo e, 0

  it "The 'toThrow' matcher is for testing if a function throws an exception", ->
    foo = -> 1 + 2
    bar = (a) -> a + 1
    expect(foo).not.toThrow()
    expect(bar).not.toThrow()

describe "A spec", ->
  it "is just a function, so it can contain any code", ->
    foo = 0
    foo += 1
    expect(foo).toEqual 1

  it "can have more than one expectation", ->
    foo = 0
    foo += 1
    expect(foo).toEqual 1
    expect(true).toEqual true

describe "A spec (with setup and tear-down)", ->
  # Here is the same set of specs written a little differently.
  # The variable under test is defined at the top-level scope
  # - the describe block - and initialization code is
  # moved into a beforeEach function.
  # The afterEach function resets the variable before continuing.
  foo = null
  beforeEach ->
    foo = 0
    foo += 1
  afterEach ->
    foo = 0
  it "is just a function, so it can contain any code", ->
    expect(foo).toEqual 1
  it "can have more than one expectation", ->
    expect(foo).toEqual 1
    expect(true).toEqual true

describe "A spec", ->
  # Calls to describe can be nested, with specs defined at any level.
  # This allows a suite to be composed as a tree of functions.
  # Before a spec is executed,
  # Jasmine walks down the tree executing each beforeEach function in order.
  # After the spec is executed, Jasmine walks through the afterEach functions similarly.
  foo = null
  beforeEach ->
    foo = 0
    foo += 1
  afterEach ->
    foo = 0
  it "is just a function, so it can contain any code", ->
    expect(foo).toEqual 1
  it "can have more than one expectation", ->
    expect(foo).toEqual 1
    expect(true).toEqual true
  describe "nested inside a second describe", ->
    bar = null
    beforeEach ->
      bar = 1
    it "can reference both scopes as needed", ->
      expect(foo).toEqual bar

xdescribe "A spec", ->
  # Suites and specs can be disabled with the xdescribe and xit functions, respectively.
  # These suites and specs are skipped when run
  # and thus their results will not appear in the results.
  foo = null
  beforeEach ->
    foo = 0
    foo += 1
  xit "is just a function, so it can contain any code", ->
    expect(foo).toEqual 1

describe "A spy", ->
  # Jasmine’s test doubles are called spies.
  # A spy can stub any function and tracks calls to it and all arguments.
  foo = null
  bar = null
  beforeEach ->
    foo =
      setBar: (value) ->
        bar = value

    spyOn foo, 'setBar'

    foo.setBar 123
    foo.setBar 456, 'another param'

  it "tracks that the spy was called", ->
    expect(foo.setBar).toHaveBeenCalled()

  it "tracks its number of calls", ->
    expect(foo.setBar.calls.length).toEqual 2

  it "tracks all the arguments of its calls", ->
    expect(foo.setBar).toHaveBeenCalledWith 123
    expect(foo.setBar).toHaveBeenCalledWith 456, 'another param'

  it "allows access to the most recent call", ->
    expect(foo.setBar.mostRecentCall.args[0]).toEqual 456

  it "allows access to other calls", ->
    expect(foo.setBar.calls[0].args[0]).toEqual 123

  it "stops all execution on a function", ->
    expect(bar).toBeNull()
```

-----
ブログやってます：[PAPA-tronix !](http://weed.cocolog-nifty.com/wzero3es/)