• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 單元測試101:你測試你的javascript嗎?(3)

    發表于:2012-11-07來源:Csdn作者:littlechang點擊數: 標簽:單元測試
    斷言 斷言是一個特殊的方法,它執行對它的參數給定的驗證,或標識一個錯誤(通常拋出一個類似AssertionError 異常),或什么也不做。最簡單的斷言是它期望

      斷言

      斷言是一個特殊的方法,它執行對它的參數給定的驗證,或標識一個錯誤(通常拋出一個類似AssertionError 異常),或什么也不做。最簡單的斷言是它期望參數是“真”。斷言通常也可接受一個在失敗時用于顯示的消息。

      [javascript] view plaincopy1. assert("Small date difference expected\n '3 days, 2 hours, 16 minutes and " +

      2. "10 seconds ago' got\n'" + element.text() + "'",

      3. element.text() == "3 days, 2 hours, 16 minutes and 10 seconds ago");

      斷言以第一個參數為消息。這個主意是要首先說明你的預期,而斷言像是用消息來說明(原文:The idea is thattesting is about stating your expectations upfront, and the assertion resemblesa specification with the leading message.)。

      你的全部需要通常像上面那個簡單斷言就能滿足,大多的測試框架都附帶選擇自定義斷言的機會。上面我們真正做的就是驗證計算值與預期值的對比。絕大多數的測試框架都針對這種情況提供多種重載的assertEquals。(Most testframeworks have something along the lines of assertEquals for thisspecific use case.)

      [javascript] view plaincopy1. assertEquals("3 days, 2 hours, 16 minutes and 10 seconds ago", element.text());

      注意我們不再指定一個說明。assertEquals 知道我們期望是第二個計算的值和第一個值相等,所以它可以為我們生成一個適當的消息。

      測試用例,setUp 和 tearDown

      在我們手工的單元測試中,我們有兩個獨立的測試。當使用測試框架時,通常在一個測試用例中指定為獨立的函數。一個測試用例是一組測試相關功能的測試的集合。為了使測試報告更容易查看,測試用例通常都有一個名字。下面的例子使用JsTestDriver測試用例來組織前面我們手工的單元測試。

      [javascript] view plaincopy1. var second = 1000;

      2. var minute = 60 * second;

      3. var hour = 60 * minute;

      4. var day = 24 * hour;

      5.

      6. TestCase("TimeDifferenceInWordsTest", {

      7. "test 8 day difference should result in '1 week ago'": function () {

      8. var dateStr = new Date(new Date() - 8 * day).toString();

      9. var element = jQuery('Replace me');

      10. element.differenceInWords();

      11.

      12. assertEquals("1 week ago", element.text());

      13. },

      14.

      15. "test should display difference with days, hours, minutes and seconds": function () {

      16. var diff = 3 * day + 2 * hour + 16 * minute + 10 * second;

      17. dateStr = new Date(new Date() - diff).toString();

      18. var element = jQuery('Replace me');

      19. element.differenceInWords();

      20.

      21. assertEquals("3 days, 2 hours, 16 minutes and 10 seconds ago", element.text());

      22. }

      23. });

      每個測試之前的注釋都轉換為測試函數的名稱,比較轉換為斷言。我們甚至可以通過把創建日期對象提取到一個特定的setUp方法調用中來使每個測試更整潔,setUp會在每個測試函數執行之前調用。

      [javascript] view plaincopy1. TestCase("TimeDifferenceInWordsTest", {

      2. setUp: function () {

      3. this.date8DaysAgo = new Date(new Date() - 8 * day);

      4. var diff = 3 * day + 2 * hour + 16 * minute + 10 * second;

      5. this.date3DaysAgo = new Date(new Date() - diff);

      6. },

      7.

      8. "test 8 day difference should result in '1 week ago'": function () {

      9. var element = jQuery('Replace me');

      10. element.differenceInWords();

      11.

      12. assertEquals("1 week ago", element.text());

      13. },

      14.

      15. "test should display difference with days, hours, minutes and seconds": function () {

      16. var element = jQuery('Replace me');

      17. element.differenceInWords();

      18.

      19. assertEquals("3 days, 2 hours, 16 minutes and 10 seconds ago", element.text());

      20. }

      21. });

      setUp 方法還有一個對應的tearDown 方法,在每個測試之后執行。這個例子不需要tearDown 方法,但你可以在任何你需要在每個測試之后執行清理時創建一個tearDown 。假想你測試使用localStorage實現緩存一些數據的代碼。為了防止測試相互之間干涉,你可能想在每個測試之后清除寫進localStorage 中的所有數據。

      另外,對代碼和測試,你需要指定某種實際運行測試方法。大多的JavaScript單元測試框架需要一個簡單的HTML文件來按正確的順序加載正確的文件(包括測試框架自身)。這個HTML文件然后可以加載到瀏覽器中。通常所有的測試通過為綠色,有失敗的測試時轉為有威脅的紅色。

      自動化,自動化,自動化

      通過把基于日志的調試工作轉到單元測試,我們確信我們的經驗是重復的和自驗證的。這樣做可節省花費大量的手工勞動,但還有改善的余地。在瀏覽器中運行包含測試的HTML文件是相當無關痛癢的,但如你注意到的,今天web開發不能在一個瀏覽器中簡單測試就完事。依據你的環境,你可能不得不在至少在3個以上平臺的5個以上的瀏覽器的2個以上最新版本上測試。突然,運行那個HTML文件也是有一點工作量的。

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>