跳過導覽列

O3noBLOG

A Happy(?)Designer ~~

單篇彙整

拾貳 31

簡單的 javascript 自動單元測試

前幾天弄完JSLint.vim後,就對 server side javascript 產生了一些興趣,還抓了v8 引擎來用,於是就想到之前想弄很久的自動單元測試,想說要跑QUnit,不過 QUnit 雖然獨立於 jQuery 了,但還是要在瀏覽器環境下才能執行,純 javascript engine 還少了 DOM BOM,就是說它需要 document, window 這些物件,找了一下發現 John Resig 有弄env.js這個專案,就是要在 js shell 裡面做出瀏覽器的環境,不過問題是目前只能跑在Rhino下,因為他是 java based ,可以在 javascript 裡面寫 Java ,所以可以做很多壞事,但是其他的 js shell 沒辦法這樣跑, John Resig 好像有想要 port 成 python + v8 的版本,不過不知道有沒有成功,因為也沒放出

剛好最近有點紅的node.js,似乎可以拿來做一樣的事情(要做 http request、開檔案、DOM),於是也調查了一下,結果缺少了重要的 DOM ,這樣也跑不起 Qunit,傷心難過之餘只好把方向改成尋找簡單的 JavaScript Unit Test Framework,希望能找到不會存取到 BOM DOM 的版本,結果找到這個,雖然沒完全符合需求,不過裡面要改的地方很少,所以改了一下就拿來用了(還不知道授權所以不敢丟出來),把幾個要用到 jQuery, DOM 的地方註解掉,還有 log 改成有錯誤才輸出,然後 ~/.vimrc 加上:

function Jsunit ()
    let ut = 'unit.test.js'
    let fn = expand('<afile>:t')
    if fn != ut
        let cwd = expand('<afile>:p:h')
        if filereadable(cwd.'/unit.test.js')
            let has_error = 0
            let cmd = 'js '. ut
            let output = system(cmd)
            for error in split(output, "\n")
                let has_error = 1
                caddexpr expand("%") . fn . ":0:0:" . error
            endfor
            if has_error == 1
                copen
            else
                echo 'Unit  : All OK.'
            endif
        endif
    endif
endfunction

autocmd FileWritePost,BufWritePost *.js :call Jsunit()

存檔的時候會自動找 unit.test.js ,如果存在的話就會執行它,unit.test.js 裡面長得像這樣:

load('testrunner.js');
load('lib.js');

test('all', function () {
    ok(libFunc(true) == 530, 'send true');
    isObj(libFunc(false), {a:'1'}, 'send false');
});

不過這個 testrunner 不能做任何和 html 文件、瀏覽器有關的測試,只能做很核心部份的測試。

引用(http://othree.net/cgi-bin/mt/mt-tb.cgi/605)

目前無人引用。

迴響(發表你的迴響)

  1. 1由 lynn 在 2009-12-31 17:09:43 發表:

    在 javascript 裡面寫 Java ?

  2. 2由 othree.net 在 2009-12-31 17:57:40 發表:

    @lynn 沒錯http://github.com/jeresig/env-js/blob/master/src/env.js第20行就有了

  3. 3由 c9s 在 2010-01-05 15:09:49 發表:

    看起來可以稍微 patch 一下,在 vim-js 裡面就可以用了 XD

    還可以加上 Joose , Joose 還有 ORM ... 好嗨阿。

發表迴響

如果欲使用OpenID,請開啟瀏覽器的JavaScript功能。

accesskey:P


其它資訊

關於本文章

簡單的 javascript 自動單元測試發表於2009-12-31,文章類別為VIM,截至目前為止共有0篇文章引用此文、3篇讀者迴響,你可以為此篇文章留下你的想法,或是訂閱讀者迴響的RSS

關於本網站

本網站是O3(othree)的個人部落格,主要內容為網路標準、網頁設計,穿插些ACG心得和敗家紀錄,如果需要聯絡我請寄信到

Google Friend Connect


認證、授權

XHTML, CSS,WCAG,創用CC 姓名標示