5

メソッドが 302 HTTPError 例外を処理する方法をテストしています。1つのメソッド呼び出しをスタブして、プログラムで1つ上げようとしましたが、引数エラーの数が間違っていると不平を言い続けます(2に対して0)

コードはこの特定の行をテストしました:

document = Nokogiri.HTML open(source_url)

仕様では、次のようにスタブしました。

subject.stub(:open).and_raise(OpenURI::HTTPError)
subject.should_receive(:ended=).with(true)
subject.update_from_remote

Nokogiri.HTML() や Open-uri.open() とは関係ないと思うのですが、なぜこうなったのでしょうか?

また、この HTTPError を 302 リダイレクト エラーにするにはどうすればよいでしょうか。ありがとう

4

2 に答える 2

8

OpenURI::HTTPError のコンストラクターには 2 つのパラメーターが必要であることがわかりました。デフォルトでは、Rspec はエラー クラスの new メソッドをパラメーターなしで呼び出すため、このエラーが発生します。そのため、必要なパラメーターを渡して手動でエラー オブジェクトを作成する必要があります。

exception_io = mock('io')
exception_io.stub_chain(:status,:[]).with(0).and_return('302')          
subject.stub(:open).with(anything).and_raise(OpenURI::HTTPError.new('',exception_io))
于 2011-11-29T01:37:40.930 に答える
1

これは非常に遅い返信ですが、これが役立つと思われる他の人のために: FakeWeb gem を Nokogiri と組み合わせて使用​​すると、コードの内部にそれほど関与することなく、この種のテストを行うことができます。テストで FakeWeb に URI を登録し、何を返すかを指定できます。例えば:

FakeWeb.register_uri(:get, 'http://www.google.com', :status => ['404', 'Not Found'])

指定する URI 引数は、メソッドが呼び出す URI と一致する必要があります。FakeWeb は呼び出しをインターセプトし、提供されたステータスを返します。

于 2014-01-22T20:08:11.073 に答える