想测试这个程序是否能抓取到正确的数据之类的,rspec 测试怎么写合适?主要是考虑到网络上抓取到的数据每次可能都不同,怎么写才能测试出程序工作正常呢?初次使用 TDD 的方式写程序,请指教。
虚拟出一个网页。
就像测试 @time = Time.now
一样,既然无法直接测试 Time.now,那我在对象中直接插入一个实例变量来代替 Time.now
instance_eval{ @time = "2013-02-19" }
不知道你是否明白这个意思?
我一直是直接给出返回的数据... 比如我用 HTTPClient 的 get 或是 post 方法,我直接把这些方法换掉,然后根据参数返回预先设置好的数据..
webmock+1
如果用 faraday 做客户端,也可以有简单的 mock 功能。
另外,可以把请求网络读取到返回数据,和解析处理数据分开。这样也 mock 返回数据的方法。
这个不适合 TDD 吧,抓网页主要问题是保持能抓到内容。我做这类的时候是这样做的,做找到要抓的页面,找到个页保存下来,去掉 tbody,然后程序测试能否抓下来。然后是列表页保存到当地,再测试能否抓到。