我正在尝试为脚本编写一些单元测试,但我似乎无法让YQL和nock一起工作。使用nock
我可以模拟http
请求没有问题,如下面的示例所示,但yql
的测试失败,yql
总是不会产生任何结果,无论什么我使用(我也在查询中尝试过xpath
)。
var http = require('http'),
nock = require('nock'),
yql = require('yql')
/**
* Mock request & test with http
*/
var api = nock("http://example.tld")
.get("/foobar/")
.reply(200, "<html><body><table><tr><td class=\"tablebody\"><a href=\"#\">link</a></td></tr></table></body></html>")
http.get("http://example.tld/foobar/", function(resp){
var str = "";
resp.on("data", function(data){ str+=data})
resp.on("end", function(){
console.log("Got Result: ", str)
})
})
/**
* Mock request and test with YQL
*/
var api = nock("http://example.tld")
.get("/foobar/")
.reply(200, "<html><body><table><tr><td class=\"tablebody\"><a href=\"#\">link</a></td></tr></table></body></html>")
var query = new yql('select * from html where url="http://example.tld/foobar/"')
query.exec(function(err, results){
console.log(results)
})
我想知道这是一个标题问题,但我尝试过的任何事情都没有产生yql
的结果。
- 任何和所有帮助非常感谢,daithi
答案 0 :(得分:0)
似乎nock
双重转义了网址,这对我来说是个问题,因为网址包含转义的网址。
最后我使用了proxyquire,这使我可以存根yql.exec
。所以yql
的单元测试现在看起来像:
var json = JSON.parse(fs.readFileSync('expectedResult.json', 'utf8'))
yqlStub = function(query){
return {
exec: function(fn){
fn(null, json)
}
}
},
myModule = proxyrequire('lib/myModule.js', {'yql', yqlStub})
myModule.run("http://example.tld", function(err, result){
//test result here
})