<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    qileilove

    blog已經轉移至github,大家請訪問 http://qaseven.github.io/

    QUnit單元測試文檔

    QUnit.test( "hello test", function ( assert ) {
    assert.ok( 1 == "1", "Passed!" );
    } )
      //綜述
    var test = [
    "QUnit.asyncTest()",//Add an asynchronous test to run. The test must include a call to QUnit.start().
    "QUnit.module()", //Group related tests under a single label. 一個標簽下的組相關測試
    "QUnit.test()" //Add a test to run.
    ],
    assertProperties = [
    "deepEqual",//深度遞歸比較,基本類型,數組、對象、正則表達式、日期和功能
    "notDeepEqual",
    "equal",
    "notEqual",
    "strictEqual",//嚴格比較 值和類型
    "strictEqual",
    "propEqual",//用于嚴格對比對象 包括對象的值、屬性的數據類型 (類似== 和===的差別)
    "notPropEqual",
    "expect",//期望(數量)注冊一個預期的計數。如果斷言運行的數量不匹配預期的統計,測試就會失敗。
    "ok",// 一個布爾檢查
    "push",//輸出封裝的JavaScript函數返回的結果報告
    "throws"http://測試如果一個回調函數拋出一個異常,并有選擇地比較拋出的錯誤。
    ],
    asyncControl = [
    "asyncTest", // QUnit測試異步代碼。asyncTest將自動停止測試運行器,等待您的代碼調用QUnit.start()繼續。
    "start", //Start running tests again after the testrunner was stopped
    "stop"  //當異步測試有多個出口點,使用QUnit.stop 增加解除test runner等待 應該調用QUnit.start()的次數。
    ],
    callbackHandlers = [
    "begin",
    "done",
    "log",
    "moduleStart",
    "moduleDone",
    "testStart",
    "testDone"
    ],
    Configuration = [
    "assert",
    "config",
    "QUnit.dump.parse()",
    "QUnit.extend() "
    ];
     //region test
    QUnit.test( "a test", function ( assert ) {
    function square( x ) {
    return x * x;
    }
    var result = square( 2 );
    assert.equal( result, 4, "square(2) equals 4" );
    } );
    QUnit.asyncTest( "asynchronous test: one second later!", function ( assert ) {
    assert.expect( 1 );
    setTimeout( function () {
    assert.ok( true, "Passed and ready to resume!" );
    QUnit.start();
    }, 1000 );
    } );
    //endregion
      //region assert 斷言
    //deepEqual   對應notDeepEqual() 深度遞歸比較,基本類型,數組、對象、正則表達式、日期和功能
    QUnit.test( "deepEqual test", function ( assert ) {
    var obj = { foo : "bar" };
    assert.deepEqual( obj, { foo : "bar" }, "Two objects can be the same in value" );
    } );
    QUnit.test( "notDeepEqual test", function ( assert ) {
    var obj = { foo : "bar" };
    assert.notDeepEqual( obj, { foo : "bla" }, "Different object, same key, different value, not equal" );
    } );
    //equal 對應notEqual()
    QUnit.test( "a test", function ( assert ) {
    assert.equal( 1, "1", "String '1' and number 1 have the same value" );
    assert.equal( 0, 0, "Zero, Zero; equal succeeds" );
    assert.equal( "", 0, "Empty, Zero; equal succeeds" );
    assert.equal( "", "", "Empty, Empty; equal succeeds" );
    assert.equal( "three", 3, "Three, 3; equal fails" );
    assert.equal( null, false, "null, false; equal fails" );
    } );
    QUnit.test( "a test", function ( assert ) {
    assert.notEqual( 1, "2", "String '2' and number 1 don't have the same value" );
    } );
    //strictEqual()  notStrictEqual()
    QUnit.test( "strictEqual test", function ( assert ) {
    assert.strictEqual( 1, 1, "1 and 1 have the same value and type" );
    } );
    QUnit.test( "a test", function ( assert ) {
    assert.notStrictEqual( 1, "1", "String '1' and number 1 have the same value but not the same type" );
    } );
    //propEqual notPropEqual 用于嚴格對比對象 包括對象的值、屬性的數據類型 (equal和propEqual 類似== 和===的差別)
    QUnit.test( "notPropEqual test", function ( assert ) {
    function Foo( x, y, z ) {
    this.x = x;
    this.y = y;
    this.z = z;
    }
    Foo.prototype.doA = function () {
    };
    Foo.prototype.doB = function () {
    };
    Foo.prototype.bar = 'prototype';
    var foo = new Foo( 1, "2", [] );
    var bar = new Foo( "1", 2, {} );
    assert.notPropEqual( foo, bar, "Properties values are strictly compared." );
    } );
    //expect 期望(數量)注冊一個預期的計數。如果斷言運行的數量不匹配預期的統計,測試就會失敗。
    QUnit.test( "a test", function ( assert ) {
    assert.expect( 3 );
    function calc( x, operation ) {
    return operation( x );
    }
    var result = calc( 2, function ( x ) {
    assert.ok( true, "calc() calls operation function" );
    return x * x;
    } );
    assert.equal( result, 4, "2 squared equals 4" );
    } );
    //ok  一個布爾檢查
    QUnit.test( "ok test", function ( assert ) {
    assert.ok( true, "true succeeds" );
    assert.ok( "non-empty", "non-empty string succeeds" );
    assert.ok( false, "false fails" );
    assert.ok( 0, "0 fails" );
    assert.ok( NaN, "NaN fails" );
    assert.ok( "", "empty string fails" );
    assert.ok( null, "null fails" );
    assert.ok( undefined, "undefined fails" );
    } );
    //push() 輸出封裝的JavaScript函數返回的結果報告
    //一些測試套件可能需要表達一個期望,不是由任何QUnit內置的斷言。這種需要一個封裝的JavaScript函數,該函數返回一個布爾值,表示結果,這個值可以傳遞到QUnit的斷言。
    QUnit.assert.mod2 = function ( value, expected, message ) {
    var actual = value % 2;
    this.push( actual === expected, actual, expected, message );
    };
    QUnit.test( "mod2", function ( assert ) {
    assert.expect( 2 );
    assert.mod2( 2, 0, "2 % 2 == 0" );
    assert.mod2( 3, 1, "3 % 2 == 1" );
    } );
    //測試如果一個回調函數拋出一個異常,并有選擇地比較拋出的錯誤。
    QUnit.test( "throws", function ( assert ) {
    function CustomError( message ) {
    this.message = message;
    }
    CustomError.prototype.toString = function () {
    return this.message;
    };
    assert.throws(
    function () {
    throw "error"
    },
    "throws with just a message, not using the 'expected' argument"
    );
    assert.throws(
    function () {
    throw new CustomError( "some error description" );
    },
    /description/,
    "raised error message contains 'description'"
    );
    assert.throws(
    function () {
    throw new CustomError();
    },
    CustomError,
    "raised error is an instance of CustomError"
    );
    assert.throws(
    function () {
    throw new CustomError( "some error description" );
    },
    new CustomError( "some error description" ),
    "raised error instance matches the CustomError instance"
    );
    assert.throws(
    function () {
    throw new CustomError( "some error description" );
    },
    function ( err ) {
    return err.toString() === "some error description";
    },
    "raised error instance satisfies the callback function"
    );
    } );
    //endregion
      //region async-control異步控制
    //QUnit.asyncTest() QUnit測試異步代碼。asyncTest將自動停止測試運行器,等待您的代碼調用QUnit.start()繼續。
    QUnit.asyncTest( "asynchronous test: one second later!", function ( assert ) {
    assert.expect( 1 );
    setTimeout( function () {
    assert.ok( true, "Passed and ready to resume!" );
    QUnit.start();
    }, 1000 );
    } );
    QUnit.asyncTest( "asynchronous test: video ready to play", function ( assert ) {
    assert.expect( 1 );
    var $video = $( "video" );
    $video.on( "canplaythrough", function () {
    assert.ok( true, "video has loaded and is ready to play" );
    QUnit.start();
    } );
    } );
    //QUnit.start() Start running tests again after the testrunner was stopped
    //QUnit.stop()  當異步測試有多個出口點,使用QUnit.stop 增加解除test runner等待 應該調用QUnit.start()的次數。
    QUnit.test( "a test", function ( assert ) {
    assert.expect( 1 );
    QUnit.stop();
    setTimeout( function () {
    assert.equal( "someExpectedValue", "someExpectedValue", "ok" );
    QUnit.start();
    }, 150 );
    } );
    //endregion
      //region module QUnit.module()后發生的所有測試調用將被分到模塊,直到調用其他其他QUnit.module()。
    // 測試結果的測試名稱都將使用模塊名稱。可以使用該模塊名稱來選擇模塊內的所有測試運行。
    //Example: Use the QUnit.module() function to group tests together:
    QUnit.module( "group a" );
    QUnit.test( "a basic test example", function ( assert ) {
    assert.ok( true, "this test is fine" );
    } );
    QUnit.test( "a basic test example 2", function ( assert ) {
    assert.ok( true, "this test is fine" );
    } );
    QUnit.module( "group b" );
    QUnit.test( "a basic test example 3", function ( assert ) {
    assert.ok( true, "this test is fine" );
    } );
    QUnit.test( "a basic test example 4", function ( assert ) {
    assert.ok( true, "this test is fine" );
    } );
    //Example: A sample for using the setup and teardown callbacks
    QUnit.module( "module A", {
    setup : function () {
    // prepare something for all following tests
    },
    teardown : function () {
    // clean up after each test
    }
    } );
    //Example: Lifecycle properties are shared on respective test context 在測試環境下共享各自的生命周期內的屬性
    QUnit.module( "Machine Maker", {
    setup : function () {
    },
    parts : [ "wheels", "motor", "chassis" ]
    } );
    QUnit.test( "makes a robot", function ( assert ) {
    this.parts.push( "arduino" );
    assert.equal( this.parts, "robot" );
    assert.deepEqual( this.parts, [ "robot" ] );
    } );
    QUnit.test( "makes a car", function ( assert ) {
    assert.equal( this.parts, "car" );
    assert.deepEqual( this.parts, [ "car", "car" ] );
    } );
    //endregion
      //region callback
    //begin  Register a callback to fire whenever the test suite begins.
    QUnit.begin( function ( details ) {
    console.log( "Test amount:", details.totalTests );
    } );
    //done  Register a callback to fire whenever the test suite ends.
    QUnit.done( function ( details ) {
    console.log( "Total: ", details.total, " Failed: ", details.failed, " Passed: ", details.passed, " Runtime: ", details.runtime );
    } );
    //log  Register a callback to fire whenever an assertion completes.
    QUnit.log( function ( details ) {
    if ( details.result ) {
    return;
    }
    var loc = details.module + ": " + details.name + ": ",
    output = "FAILED: " + loc + ( details.message ? details.message + ", " : "" );
    if ( details.actual ) {
    output += "expected: " + details.expected + ", actual: " + details.actual;
    }
    if ( details.source ) {
    output += ", " + details.source;
    }
    console.log( output );
    } );
    //moduleStart  Register a callback to fire whenever a module begins.
    QUnit.moduleStart( function ( details ) {
    console.log( "Now running: ", details.name );
    } );
    //moduleDone  Register a callback to fire whenever a module ends.
    QUnit.moduleDone( function ( details ) {
    console.log( "Finished running: ", details.name, "Failed/total: ", details.failed, details.total );
    } );
    //testStart Register a callback to fire whenever a test begins.
    QUnit.testStart( function ( details ) {
    console.log( "Now running: ", details.module, details.name );
    } );
    //testDone Register a callback to fire whenever a test ends.
    QUnit.testDone( function ( details ) {
    console.log( "Finished running: ", details.module, details.name, "Failed/total: ", details.failed, details.total, details.duration );
    } );
    //endregion
     //region Configuration
    //assert Namespace for QUnit assertions
    QUnit.test( "`ok` assertion defined in the callback parameter", function ( assert ) {
    assert.ok( true, "on the object passed to the `test` function" );
    } );
    //config Configuration for QUnit
    QUnit.config.autostart = false;
    QUnit.config.current.testName = "zodiac";
    QUnit.config.urlConfig.push( {
    id : "jquery",
    label : "jQuery version",
    value : [ "1.7.2", "1.8.3", "1.9.1" ],
    tooltip : "What jQuery Core version to test against"
    } );
    //QUnit.dump.parse() 它解析數據結構和對象序列化為字符串。也解析DOM元素outerHtml為字符串
    QUnit.log( function ( obj ) {
    // Parse some stuff before sending it.
    var actual = QUnit.dump.parse( obj.actual );
    var expected = QUnit.dump.parse( obj.expected );
    // Send it.
    } );
    var qHeader = document.getElementById( "qunit-header" ),
    parsed = QUnit.dump.parse( qHeader );
    console.log( parsed );
    // Logs: "<h1 id=\"qunit-header\"></h1>"
    //QUnit.extend() Copy the properties defined by the mixin object into the target object
    QUnit.test( "QUnit.extend", function ( assert ) {
    var base = {
    a : 1,
    b : 2,
    z : 3
    };
    QUnit.extend( base, {
    b : 2.5,
    c : 3,
    z : undefined
    } );
    assert.equal( base.a, 1, "Unspecified values are not modified" );
    assert.equal( base.b, 2.5, "Existing values are updated" );
    assert.equal( base.c, 3, "New values are defined" );
    assert.ok( !( "z" in base ), "Values specified as `undefined` are removed" );
    } );
    //endregion

    posted on 2014-12-11 23:24 順其自然EVO 閱讀(155) 評論(0)  編輯  收藏 所屬分類: 測試學習專欄

    <2014年12月>
    30123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    導航

    統計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 九九久久精品国产免费看小说| 免费在线观看亚洲| 免费精品一区二区三区第35| 久久久久亚洲爆乳少妇无 | 亚洲色欲色欱wwW在线| 久久午夜夜伦鲁鲁片免费无码影视 | 四虎国产精品免费视| 在线91精品亚洲网站精品成人| 日日操夜夜操免费视频| 亚洲AⅤ男人的天堂在线观看| 日日AV拍夜夜添久久免费| 看亚洲a级一级毛片| 国产成人亚洲精品91专区手机| 日日躁狠狠躁狠狠爱免费视频| 三上悠亚亚洲一区高清| a毛片免费全部在线播放**| 亚洲国产精品无码久久SM| 少妇太爽了在线观看免费视频| 亚洲国产美女在线观看| 日韩成人在线免费视频| fc2成年免费共享视频18| 亚洲国产精品一区二区成人片国内| 无码A级毛片免费视频内谢| 亚洲人色大成年网站在线观看| 午夜免费福利在线| 一级做a爱过程免费视| 亚洲AV无码不卡无码| 无人影院手机版在线观看免费| 毛片亚洲AV无码精品国产午夜| 亚洲精品无码久久毛片| 久久精品乱子伦免费| 亚洲综合一区二区三区四区五区| 国产在线观看免费完整版中文版| 99re6在线精品免费观看| 亚洲av日韩av无码av| 亚洲成AV人在线观看网址| 久久国产乱子伦精品免费不卡| 亚洲人成电影网站色www| 亚洲日本va在线视频观看| 久久受www免费人成_看片中文| 成人一级免费视频|