Ruby 想写一个网络抓取数据的程序,该怎么写 rspec 测试?

alphaliu · 2013年02月19日 · 最后由 wppurking 回复于 2013年02月21日 · 3504 次阅读

想测试这个程序是否能抓取到正确的数据之类的,rspec测试怎么写合适?主要是考虑到网络上抓取到的数据每次可能都不同,怎么写才能测试出程序工作正常呢?初次使用TDD的方式写程序,请指教。

共收到 13 条回复

虚拟出一个网页。 就像测试 @time = Time.now 一样,既然无法直接测试Time.now,那我在对象中直接插入一个实例变量来代替 Time.now

instance_eval{ @time = "2013-02-19" }

不知道你是否明白这个意思?

这样我倒是明白了。你说的这个@time = Time.now我有印象,是哪本书上说的?

先写一个目标html放在本地,然后直接读这个html看抓取内容是否正确 访问目标网站用另一个case写

#3楼 @yesmeck 谢谢,跟我之前一直在考虑的一样,要用mock和stub,不过因为不是很熟悉,所以都不知道怎么写。有这个webmock非常合适我的场景。

#3楼 @yesmeck 这个gem 不错 我一直也在想这种场景 怎么测试

我一直是直接给出返回的数据... 比如我用HTTPClient的get 或是post方法,我直接把这些方法换掉,然后根据参数返回预先设置好的数据..

@AlphaLiu Ruby 元编程的扁平作用域

webmock+1

如果用faraday 做客户端,也可以有简单的mock 功能。

另外,可以把请求网络读取到返回数据,和解析处理数据分开。这样也mock 返回数据的方法。

这个不适合TDD吧,抓网页主要问题是保持能抓到内容。我做这类的时候是这样做的,做找到要抓的页面,找到个页保存下来,去掉tbody,然后程序测试能否抓下来。然后是列表页保存到当地,再测试能否抓到。

#9楼 @wppurking 这应该是上下文探针,好像跟扁平化作用域没什么关系吧,对对象强行注入一个属性而已。

@neverlandxy_naix You are right. 我弄混了, 多谢指正. :-)

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册