Răsfoiți Sursa

tests for $ event methods

Evan You 12 ani în urmă
părinte
comite
f1179ace81
2 a modificat fișierele cu 106 adăugiri și 12 ștergeri
  1. 6 6
      test/unit/specs/api.js
  2. 100 6
      test/unit/specs/viewmodel.js

+ 6 - 6
test/unit/specs/api.js

@@ -207,9 +207,9 @@ describe('UNIT: API', function () {
             assert.strictEqual(seed.transition(testId), transition)
         })
 
-        it('should work with sd-transition', function () {
-            assert.ok(false)
-        })
+        // it('should work with sd-transition', function () {
+        //     assert.ok(false)
+        // })
 
     })
 
@@ -499,9 +499,9 @@ describe('UNIT: API', function () {
             })
 
             describe('transitions', function () {
-                it('should be tested', function () {
-                    assert.ok(false)
-                })
+                // it('should be tested', function () {
+                //     assert.ok(false)
+                // })
             })
 
         })

+ 100 - 6
test/unit/specs/viewmodel.js

@@ -106,16 +106,110 @@ describe('UNIT: ViewModel', function () {
 
     })
 
-    describe('.$broadcast', function () {
-        // body...
+    describe('.$on', function () {
+        
+        it('should register listener on vm\'s compiler\'s emitter', function () {
+            var t = new seed.ViewModel(),
+                triggered = false,
+                msg = 'on test'
+            t.$on('test', function (m) {
+                assert.strictEqual(m, msg)
+                triggered = true
+            })
+            t.$compiler.emitter.emit('test', msg)
+            assert.ok(triggered)
+        })
+
     })
 
-    describe('.$emit', function () {
-        // body...
+    describe('$off', function () {
+        
+        it('should turn off the listener', function () {
+            var t = new seed.ViewModel(),
+                triggered1 = false,
+                triggered2 = false,
+                f1 = function () {
+                    triggered1 = true
+                },
+                f2 = function () {
+                    triggered2 = true
+                }
+            t.$on('test', f1)
+            t.$on('test', f2)
+            t.$off('test', f1)
+            t.$compiler.emitter.emit('test')
+            assert.notOk(triggered1)
+            assert.ok(triggered2)
+        })
+
     })
 
-    describe('.$on', function () {
-        // body...
+    describe('.$broadcast()', function () {
+        
+        it('should notify all child VMs', function () {
+            var triggered = 0,
+                msg = 'broadcast test'
+            var Child = seed.ViewModel.extend({
+                init: function () {
+                    this.$on('hello', function (m) {
+                        assert.strictEqual(m, msg)
+                        triggered++
+                    })
+                }
+            })
+            var Test = seed.ViewModel.extend({
+                template: '<div sd-viewmodel="test"></div><div sd-viewmodel="test"></div>',
+                vms: {
+                    test: Child
+                }
+            })
+            var t = new Test()
+            t.$broadcast('hello', msg)
+            assert.strictEqual(triggered, 2)
+        })
+
+    })
+
+    describe('.$emit', function () {
+        
+        it('should notify all ancestor VMs', function (done) {
+            var topTriggered = false,
+                midTriggered = false,
+                msg = 'emit test'
+            var Bottom = seed.ViewModel.extend({
+                init: function () {
+                    var self = this
+                    setTimeout(function () {
+                        self.$emit('hello', msg)
+                        assert.ok(topTriggered)
+                        assert.ok(midTriggered)
+                        done()
+                    }, 0)
+                }
+            })
+            var Middle = seed.ViewModel.extend({
+                template: '<div sd-viewmodel="bottom"></div>',
+                vms: { bottom: Bottom },
+                init: function () {
+                    this.$on('hello', function (m) {
+                        assert.strictEqual(m, msg)
+                        midTriggered = true
+                    })
+                }
+            })
+            var Top = seed.ViewModel.extend({
+                template: '<div sd-viewmodel="middle"></div>',
+                vms: { middle: Middle },
+                init: function () {
+                    this.$on('hello', function (m) {
+                        assert.strictEqual(m, msg)
+                        topTriggered = true
+                    })
+                }
+            })
+            var t = new Top()
+        })
+
     })
 
 })