function afterDraw(expect) {
  waits(32)

  runs(function() {
    expect()
  });
}

// specs code
describe("MagJS - module", function() {

  beforeEach(function() {
    affix("div#test h2+p>b")
  })

  it("is defined", function() {
    expect(mag.module).toBeDefined();
  });
  it("is accepts one argument", function() {

    spyOn(mag, 'module')
    mag.module('test')
    expect(mag.module).toHaveBeenCalledWith('test')
  });

  it("is accepts two arguments", function() {
    spyOn(mag, 'module').andCallThrough()

    var view = {
      controller: function(p) {
        this.p = [1, 2]
      },
      view: function(e, p, s) {
        s.h2 = 'tester'
        s.b = {
          _onclick: function() {
            s.p = [2]
          }
        }
      }
    }

    mag.module('test', view)
    expect(mag.module).toHaveBeenCalledWith('test', view)

    afterDraw(function() {
      expect($('#test h2').text()).toEqual('tester')
      expect($('#test p').length).toEqual(2)
      $('#test b').click()
      afterDraw(function() {
        expect($('#test p').length).toEqual(1)
      });
    });
  });
});

@@ -77,16 +77,394 @@
  %7D);%0A%7D%0A%0A
+%0Avar view = %7B%0A  controller: function(p) %7B%0A    this.p = %5B1, 2%5D%0A    this.h2 = %7B%0A      _text: 'tester',%0A      _config: function(n, is, c, i) %7B%0A        c.onunload = function() %7B%0A          console.log('unloaded', arguments)%0A        %7D%0A      %7D%0A    %7D%0A  %7D,%0A  view: function(e, p, s) %7B%0A%0A    s.b = %7B%0A      _onclick: function() %7B%0A        s.p = %5B2%5D%0A        s.h2 = null%0A      %7D%0A    %7D%0A  %7D%0A%7D%0A%0A%0A
 // specs
@@ -892,255 +892,8 @@
 h()%0A
-%0A    var view = %7B%0A      controller: function(p) %7B%0A        this.p = %5B1, 2%5D%0A      %7D,%0A      view: function(e, p, s) %7B%0A        s.h2 = 'tester'%0A        s.b = %7B%0A          _onclick: function() %7B%0A            s.p = %5B2%5D%0A          %7D%0A        %7D%0A      %7D%0A    %7D%0A%0A
     
@@ -917,16 +917,18 @@
 , view)%0A
+%0A%0A
     expe
@@ -1230,12 +1230,218 @@
 ;%0A  %7D);%0A
+%0A  it(%22will call onunload after node is removed%22, function() %7B%0A    mag.module('test', view)%0A    afterDraw(function() %7B%0A      $('#test b').click()%0A      expect($('#test h2').text()).toEqual('')%0A    %7D)%0A  %7D)%0A%0A
 %7D);%0A

Update module-spec.js