`
piperzero
  • 浏览: 3477140 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

MockMe:一个新的JavaScript mocking框架

 
阅读更多
Johannes Link是一个热爱Agile的小伙子,他对现存的JavaScript单元测试框架不100%满意,他解释了原因,比如他给出了一个例子:

Js代码 复制代码
  1. testDoubleSpeaker:function(){with(this){
  2. varactualMsg=null;
  3. varmockSay=function(msg){
  4. actualMsg=msg;
  5. };
  6. Speaker.say=mockSay;
  7. DoubleSpeaker.say('oops');
  8. assertEqual('oopsoops',actualMsg);
  9. }}


这个例子能够运行,但是下面的方式是不是更好?
Js代码 复制代码
  1. testDoubleSpeaker:function(){with(this){
  2. mock(Speaker).andDo(function(){
  3. DoubleSpeaker.say('oops');
  4. verify(Speaker.say)('oopsoops');
  5. });
  6. }},



所以,他给出了一个新的JavaScript mocking框架:MockMe。主要功能是:

1。提供基本颗粒mocking的功能,如果可能,可以伪装一个简单测试功能,而不影响其他内容(比如对象,原型或者全局命名空间等)。

2。很多时候,spying(刺探)比mocking更好,因为前者更简单。spying指的不是在你的mock对象开始测试前,指定期望的特定反馈,而是当测试发生时或之后,你使用mock spy对象来刺探反馈结果。

下面是另外一个例子:

Js代码 复制代码
  1. when(f)('in').thenReturn('out');
  2. assertEqual('out',f('in'));
  3. when(f)({name:'hello'}).thenReturn('yeah');
  4. assertEqual('yeah',f({name:'hello'}));
  5. when(f)(any()).thenReturn('yeah');
  6. assertEqual('yeah',f(1));
  7. verify(times(2),f)(1);//succeeds
  8. useMockerFor(function(mocker)){
  9. mocker.within(MyObject).mock('f1');
  10. when(MyObject.f1)().thenReturn(5);
  11. assertEqual(7,MyObject.f2());
  12. }//Hereeverythingyoumockedwillautomaticallyberestored
  13. assertEqual(3,MyObject.f2());


详细内容可以访问http://johanneslink.net/projects/mockme.html
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics