RSpecでスクレイピングのテストをする時のHTMLファイルの置き場所
特定のページをスクレイピングして解析するスクリプトをRubyで書いているのですが、
このスクリプトのテストをRSpecで書く時にどこにHTMLファイルを置いて、
どうspecファイルから呼び出すのが正しいのでしょうか?
Rails環境ではななくフレームワークなしのRubyのコードで以下の様な構成です。
foo.rb
foo/sub_class.rb
spec/foo_spec.rb
spec/spec_helper.rb
spec/foo/sub_class_spec.rb
追記
具体的にはSelenium::WebDriver.for
で生成した driver
を Foo::SubClass
が受け取り、解析をするためにNokogiri
に @driver.page_source
で渡しています。
(上ではSubClass
と書いていたのですが、ここではBar
にしてます。)
class Foo::Bar
attr_accessor :driver
def initialize(code: code, driver: driver)
@code = code
@driver = driver
end
def doc
Nokogiri::HTML(@driver.page_source)
end
end
ですので、ここで受け取る@driver.page_source
をFile.read
で保存していたHTMLからの読み込みで差し替えたいのですがうまく行きませんでした。ファイルの読み込み自体はできていますので配置ではなくallow
の使い方の問題だと思うので、そちらについてはもう少し調べてみます。
ファイルの読み込み方に問題があれば指摘をよろしくお願いします。
require 'spec_helper'
describe Foo::Bar do
let(:bar){ Foo::Bar.new(code: 1, driver: nil) }
describe "driver#page_source" do
it "do something" do
allow(bar.driver).to receive(:page_source){ Nokogiri::HTML(File.read("spec/fixture/bar/sample.html")) }
expect(bar.driver.page_source).to present
end
end
end
エラー内容は以下のようになっています。
NameError:
undefined local variable or method `present' for #<RSpec::ExampleGroups::FooBar::DriverPageSource:0x007fc8660444e0>