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') //()返回结果是一个buffer,相当于byte[]
-
html = fs.readFileSync('').toString('utf8')
-
dom= new jsdom.JSDOM(html)
-
$=jquery(dom.window) console.log($('h1'))
使用cheerio的方式
-
cheerio=require('cheerio')
-
html=require('fs').readFileSync("").toString('utf8')
-
$=cheerio.load(html)
-
console.log($('h1'))
使用jquery+jsdom模拟浏览器实现自动化测试
测试是需要自动化的,靠人测不仅慢而且不准确。
测试不是为了覆盖住全部的错误,程序不可能通过测试来发现全部的问题,测试只是起到锦上添花的作用,测试只能在一定程度上减少基本错误。
selenium的自动化测试方案从用户的角度测试,node的出现为前端自动化测试提供了新方法。
node中的全局对象是global,浏览器中的全局对象是window,我们只需要让global中添加一个window对象便万事大吉了,这就需要用到jsdom。
有一个文件,我们通过jquery的方式获取其中id为haha的span的文本。
<div><span id='haha'>天下大势为我所控</span></div>
很简单的
module.exports=function(){ return $("#haha").text() }
编写测试
-
html=require('fs').readFileSync("").toString('utf8')
-
jquery=require('jquery')
-
jsdom=require('jsdom')
-
dom=new jsdom.JSDOM(html)
-
global.window=dom.window
-
global.$=jquery(dom.window)
-
getHaha=require('./')
-
console.log(getHaha())
直接运行node 便能够对中的内容进行测试了。