| 12345678910111213141516171819202122232425262728293031323334353637383940414243 | 
							- beforeEach(function() {
 
-     this.addMatchers({
 
-         toImplement: function(extension) {
 
-             var instance = this.actual;
 
-             var notImplements = [];
 
-             for (var m in extension.prototype) {
 
-                 if (typeof(extension.prototype[m]) == 'function' &&
 
-                     typeof (instance[ m ]) != 'function') {
 
-                     notImplements.push(m);
 
-                 }
 
-             }
 
-             this.message = function() {
 
-                 return '未实现接口:' + notImplements.join(', ');
 
-             };
 
-             return notImplements.length === 0;
 
-         },
 
-         toMatchPlain: function(expected) {
 
-             var actual = this.actual;
 
-             var match = true;
 
-             for (var p in expected) {
 
-                 if (expected[ p ] !== actual[ p ]) {
 
-                     match = false;
 
-                 }
 
-             }
 
-             this.message = function() {
 
-                 return '字面量不符合预期';
 
-             };
 
-             return match;
 
-         },
 
-         toHaveSubString: function(expected) {
 
-             var actual = this.actual;
 
-             this.message = function() {
 
-                 return'未包含期望的子字符串';
 
-             };
 
-             return !!~actual.substr(expected);
 
-         }
 
-     });
 
- });
 
 
  |