node使用jquery的兩種方式
在node下,使用jquery有兩種方法:
- 使用jsdom模擬一個window對象
- 使用cheerio,cheerio只實現了jquery的dom部分功能,相當於jquery的一個子集,jquery還包含網絡請求、bom等更為豐富的API。
這兩種方法各有利弊,jsdom的方式非常完善穩妥,jquery久經考驗,但它的缺點在於速度較慢;cheerio速度較快,但是功能有限,然而cheerio的功能已經夠用了。
使用jsdom的方式
fs = require("fs")
jquery=require('jquery')
jsdom=require('jsdom') //fs.readFileSync()返回結果是一個buffer,相當於byte[]
html = fs.readFileSync('haha.html').toString('utf8')
dom= new jsdom.JSDOM(html)
$=jquery(dom.window) console.log($('h1'))
使用cheerio的方式
cheerio=require('cheerio')
html=require('fs').readFileSync("haha.html").toString('utf8')
$=cheerio.load(html)
console.log($('h1'))
使用jquery+jsdom模擬瀏覽器實現自動化測試
測試是需要自動化的,靠人測不僅慢而且不准確。
測試不是為了覆蓋住全部的錯誤,程序不可能通過測試來發現全部的問題,測試只是起到錦上添花的作用,測試只能在一定程度上減少基本錯誤。
selenium的自動化測試方案從用戶的角度測試,node的出現為前端自動化測試提供了新方法。
node中的全局對象是global,瀏覽器中的全局對象是window,我們只需要讓global中添加一個window對象便萬事大吉了,這就需要用到jsdom。
有一個index.html文件,我們通過jquery的方式獲取其中id為haha的span的文本。
<div><span id='haha'>天下大勢為我所控</span></div>
很簡單的lib.js
module.exports=function(){ return $("#haha").text() }
編寫測試test.js
html=require('fs').readFileSync("index.html").toString('utf8')
jquery=require('jquery')
jsdom=require('jsdom')
dom=new jsdom.JSDOM(html)
global.window=dom.window
global.$=jquery(dom.window)
getHaha=require('./lib.js')
console.log(getHaha())
直接運行node test.js便能夠對lib.js中的內容進行測試了。