1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 2 "http://www.w3.org/TR/html4/loose.dtd"> 3 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Tests</title> 8 <link rel="stylesheet" type="text/css" href="jsunit/css/jsUnitStyle.css"> 9 <script language="JavaScript" type="text/javascript" src="../../jsunit/app/jsUnitCore.js"></script> 10 <script language="JavaScript" type="text/javascript" src="../mock4js.js"></script> 11 <script language="JavaScript" type="text/javascript" src="PriceService.js"></script> 12 <script language="JavaScript" type="text/javascript"> 13 14 Mock4JS.addMockSupport(this); 15 16 var mockPriceFetcher; 17 var mockPriceCache; 18 var priceService; 19 20 function setUp() { 21 Mock4JS.clearMocksToVerify(); 22 mockPriceFetcher = mock(PriceFetcher); 23 mockPriceCache = mock(PriceCache); 24 priceService = new PriceService(mockPriceFetcher.proxy(), mockPriceCache.proxy()); 25 } 26 27 function tearDown() { 28 Mock4JS.verifyAllMocks(); 29 } 30 31 function testGetsPriceFromFetcherWhenPriceNotInCache() { 32 mockPriceCache.expects(once()).getCachedPrice("USDGBP").will(returnValue(null)); 33 mockPriceFetcher.expects(once()).getPriceFromServer("USDGBP").will(returnValue(123.4)); 34 mockPriceCache.expects(once()).setCachedPrice("USDGBP", 123.4); 35 36 var result = priceService.getPrice("USDGBP"); 37 38 assertEquals("Should have returned price from server", 123.4, result); 39 } 40 41 function testDoesntGetsPriceFromFetcherWhenPriceAlreadyInCache() { 42 mockPriceCache.expects(once()).getCachedPrice("USDGBP").will(returnValue(123.4)); 43 mockPriceCache.expects(never()).setCachedPrice(); 44 mockPriceFetcher.expects(never()).getPriceFromServer("USDGBP"); 45 46 var result = priceService.getPrice("USDGBP"); 47 48 assertEquals("Should have returned price from cache", 123.4, result); 49 } 50 51 </script> 52 </head> 53 54 <body> 55 <h1>JsUnit Tests</h1> 56 57 <p>This page contains some JsUnit tests. To see them, take a look at the source.</p> 58 </body> 59 </html> 60 61