rspec でマッチャーがあればよいのですが、とりあえず心当たりがなかったので、適当にごまかしました。良いgemがあれば紹介して欲しいです。
page.source が サーバからの出力を返してくださるので、これを Nokogiri で parse させてエラーがないかどうかで確認しました。
ならば /XMLを出力する/ do
errros = Nokogiri::XML(page.source).errors
expect(errors).to be_empty
end
どうせなら下記のように書きたいですね。
ならば /XMLを出力する/ do
should render_xml
end
マッチャーを書いてみます。
RSpec::Matchers.define :render_xml do
match do |actual|
Nokogiri::XML(actual.source).errors.empty?
end
end
ほとんどそのままです。matcher つくるのは難しくないので気軽に作りたいです。
少しだけ解説。 y cucumberの中では subject を省略した場合は page になります。なので、
ならば /XMLを出力する/ do
page.should render_xml
end
と書いたのと等しいです。なので、acutual には page オブジェクトがバインドされていますので、そこから source を取り出してチェックします。page オブジェクトには html というメソッドが存在しますが、ブラウザが解釈したあとのDOMをdumpしたような感じになってるので期待通りの動きをしませんでした。