WEB开发网
开发学院网页设计JavaScript 使用JsUnit和JSMock的JavaScript测试驱动开发 阅读

使用JsUnit和JSMock的JavaScript测试驱动开发

 2010-09-14 13:44:54 来源:WEB开发网   
核心提示: getBalance方法的实现现在看上去是这样的:drw.SlotMachine.prototype.getBalance=function(){if(this.balanceRequested)return;try{//thislineofcoderequirestheveryexcel

getBalance方法的实现现在看上去是这样的:

drw.SlotMachine.prototype.getBalance = function() {
 if(this.balanceRequested)
  return;
 try{
  // this line of code requires the very excellent functional.js
  // library, found at http://osteele.com/sources/javascript/functional
  this.networkClient.send('/getBalance.jsp', this.deposit.bind(this));
  this.balanceRequested = true;
 }catch(e){
  this.buttonElement.value = 'Sorry, can't talk to the server right now';
 }
};

与stub相比,mock的一个缺点是和被测系统的耦合相当多,至少希望拿来就用。当被测系统的行为与期望不符时,你希望测试失败──你并不希望被封装的实现细节有任何变化时,测试就会失败。为了弥补这种情况,JsMock提供了放宽期望的能力。其实你已经看到了这个例子。当我们准备网络mock对象时,这样写的:

networkMock.expects().send('/getBalance.jsp', TypeOf.isA(Function));

我们并没有指定哪个回调函数会被用作第二个参数,只需要是一个回调函数就可以了。如果我们想把这些期望放的更宽些,我们可以这样尝试:

networkMock.expects().send(TypeOf.isA(String), TypeOf.isA(Function));

如果我们想引用网络客户端mock的send方法的实际回调函数,我们可以使用JsMock框架的andStub方法:

var depositCallback;
networkMock.expects()
  .send('/getBalance.jsp', TypeOf.isA(Function))
  .andStub( function(){depositCallback = arguments[1];} );
depositCallback({responseText:"10"});
 

上一页  5 6 7 8 9 10 

Tags:使用 JsUnit JSMock

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接