JsMockito - JavaScript 單元測試工具

jopen 12年前發布 | 18K 次閱讀 單元測試 JavaScript

JsMockito

    用過Rhino Mocks后大家一定對它印象深刻,用它來做單元測試的case相當的省事。今天咱們同樣來介紹一款Mock工具:JsMockito,用它能輕松的制作JavaScript程序的單元測試case。

    JsMockito的運行還依賴另外一款開源的JS工具:JsHamcrest,我們可以通過如下代碼來搭建測試環境:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Test JavaScript Mock</title>
    <script src="jshamcrest.js" language="javascript" type="text/javascript"></script>
    <script src="jsmockito.js" language="javascript" type="text/javascript"></script>
    <script language="javascript" type="text/javascript">
        var mockFunc = JsMockito.mockFunction();
        JsMockito.when(mockFunc)('jim').thenReturn('hello jim');
        alert(mockFunc('jim'));
    </script>
</head>
<body>

</body>
</html>


模擬JS的原生對象

        var mockArray = JsMockito.mock(Array);
        JsMockito.when(mockArray).slice(10).thenReturn('^__^');
        alert(mockArray.slice(10));  //結果是: ^__^

 

模擬對象的方法

        bob = {
            FullName: 'bob ling',
            Introduce: function () { return 'im bob'; }
        };


        var mockIntroduce = JsMockito.mockFunction();
        JsMockito.when(mockIntroduce)().thenReturn("it's ok!");

        bob.Introduce = mockIntroduce;
        alert(bob.Introduce()); //結果是: it's ok

 

模擬對象的屬性

        var mockBob = JsMockito.mock(bob);
        mockBob.FullName = 'Bruce Lee';
        alert(mockBob.FullName);//結果是:Bruce Lee


 

模擬對象的方法(根據輸入參數的情況來返回結果)

        var mockFunction = JsMockito.mockFunction();
        JsMockito.when(mockFunction)(JsHamcrest.Matchers.lessThan(10) && JsHamcrest.Matchers.greaterThan(5), JsHamcrest.Matchers.anything()).thenReturn('this value must belong 5 to 10');
        alert(mockFunction(6, null)); //this value must belong 5 to 10
        alert(mockFunction(2, null));//undefined


 

模擬對象的方法(根據調用環境的不同來返回結果)

        context1 = {};
        context2 = {};
        var mockFunc = JsMockito.mockFunction();
        JsMockito.when(mockFunc).call(context1).thenReturn('this method was called by context');

        alert(mockFunc.apply(context1)); //this method was called by context
        alert(mockFunc.apply(context2)); //undefined

        alert(mockFunc.call(context1)); //this method was called by context
        alert(mockFunc.call(context2)); //undefined


來自:http://blog.csdn.net/ghostbear/article/details/8073087
 

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!