     .not.toThrow()
 
     foo = new out.Foo()
-    expect(-> foo.bar = 'value').toThrow()+    expect(-> foo.bar = 'value').toThrow()

      expect(calls).toBe(3)
      expect(events).toBe(2)

    it 'correctly works with dependencies', ->
      class Person extends Base
        @property 'firstName'
        @property 'lastName'
        @property 'fullName', depends: ['firstName', 'lastName'], -> @_fullName = "#{@firstName} #{@lastName}"
      p = new Person()
      n = 0
      p.on 'change:fullName', -> ++n

      p.fullName
      expect(n).toBe(1)
      expect(p.fullName).toBe('undefined undefined')

      p.firstName = 'Yaroslav'
      expect(n).toBe(2)
      expect(p.fullName).toBe('Yaroslav undefined')

      p.lastName = 'Volkov'
      expect(n).toBe(3)
      expect(p.fullName).toBe('Yaroslav Volkov')

    it 'returns actual value if value changes during get (memo: true)', ->
      class Person extends Base
        @property 'name', memo: true, -> 'Yaroslav'

        expect(n).toBe(3)
        c.count
        expect(n).toBe(3)

  describe 'both readonly and computed property', ->
    it 'correctly gets, sets value and emits events', ->
