     ###
     it 'Getter', ->
         a = new MVCObject()
-        spy = sinon.spy()
-        a.getX = spy
+        a.getX = sinon.spy()
         a.x = 2
-        expect(a.get('x')).to.equal 2 # 直接返回self[key]
-        expect(spy.called).to.not.be.ok # getterName 未被调用
+        a.get('x').should.equal 2 # 直接返回self[key]
+        a.getX.should.not.have.been.called # getterName 未被调用
 
     it 'GetterBind', ->
         a = new MVCObject()
-        spy = sinon.spy()
         a.getX = ->
-            spy()
             1
+        sinon.spy a, 'getX'
         b = new MVCObject()
         b.bindTo 'x', a
-        expect(b.get('x')).to.equal 1
-        expect(spy.calledOnce).to.be.ok # 当b调用时, a[getterName]被调用一次
+        b.get('x').should.equal 1
+        a.getX.should.have.been.calledOnce
 
     it 'Priority', ->
         a = new MVCObject()
         b = new MVCObject()
         a.set 'k', 1
         b.set 'k', 2
-        expect(a.get('k')).to.equal 1 # 未绑定之前
-        expect(b.get('k')).to.equal 2
+        a.get('k').should.equal 1 # 未绑定之前
+        b.get('k').should.equal 2
         a.bindTo 'k', b
-        expect(a.get('k')).to.equal 2 # 绑定之后
-        expect(b.get('k')).to.equal 2
+        a.get('k').should.equal 2 # 绑定之后
+        b.get('k').should.equal 2
 
     it 'PriorityUndefined', ->
         a = new MVCObject()
         b = new MVCObject()
         a.set 'k', 1
-        expect(a.get('k')).to.equal 1 # 未绑定之前
+        a.get('k').should.equal 1 # 未绑定之前
         a.bindTo 'k', b
-        expect(a.get('k')).to.equal undefined # 绑定之后
-        expect(b.get('k')).to.equal undefined
+        should.not.exist a.get 'k' # 绑定之后
+        should.not.exist b.get 'k'
 
     ###
         a --> b --> c

        m = new MVCObject()
        n = new MVCObject()
        p = new MVCObject()
        spy1 = sinon.spy()
        spy2 = sinon.spy()
        n.k_changed = spy1
        p.k_changed = spy2
        n.bindTo 'k', m # first invoke
        p.bindTo 'k', m, 'k', true # no first invoke
        m.set 'k', 1 # n second invoke, p first invoke
        expect(spy1.calledTwice).to.be.ok
        expect(spy2.calledOnce).to.be.ok

    # it 'SetNotifyKeyEvent', ->
    #     m = new MVCObject

        n.bindTo 'kn', m, 'km'
        o.bindTo 'ko', n, 'kn'
        o.set 'ko', 1
        m.get('km').should.equal 1
        n.get('kn').should.equal 1
        o.get('ko').should.equal 1

    it 'Inheritance', ->
        spy = sinon.spy()
