0

最近、現在のアプリで Rails 3.2.8 にアップグレードしましたが、いくつかのテストに合格できません。特定のハッシュを params ハッシュとマージし、現在のページへのリンクを作成するヘルパー メソッドを作成しました。私が見たテクニックを使用しました: link_to 現在のページ plus/merged with a param

以下は、簡略化されたバージョンです。

def simple_link
  link_to "Page", params.merge(:c => nil)
end

次に、次のような方法でテストします。

describe "simple_link" do
  it { simple_link.should == "<a href=\"/assets\">Page</a>" }
end

これは 3.2.6 で通過していました。

ただし、rspec エラーが表示されるようになりましNo route matches {:c=>nil}た。Rails、rspec、またはカピバラのいずれかが、ハッシュがルートであると考えています。のような適切なルートを追加するusers_pathと、url_for がハッシュを取得するように見えます。ブラウザでテストすると、すべて正常に動作し、エラーは発生しません。私は何か間違ったことをしていますか、3.2.8 で何かが変更されましたか、それともバグですか?

4

2 に答える 2

1

レールをアップグレードすると、ジャーニールーティング gem も 1.0.3 から 1.0.4 にアップグレードされます。そのアップグレードでは、ルーティングが制約を処理する方法が変更されました。

1.0.4 は Rails 3.1 からのリグレッションを修正し、ユーザーが渡した制約が何にも一致しなくてもルーターがルートを返すという問題を修正しました。

ジャーニーを 1.0.3 にダウングレードすると問題が解決すると (コメントで) 述べているので、このジャーニーの変更が問題の原因であることはほぼ確実です。これらの github の問題を見て、考えられる解決策を見つけてください。

于 2012-10-29T23:53:08.817 に答える
0

エラーは、ヘルパーからlink_toを呼び出している方法であり、現在の要求を提供していません。今のところ、スタブすることでエラーを回避できますurl_forが、これではparamsハッシュをテストできません。だから、より良い方法を見つけようとしています。

it "should return the right tag" do
  self.stub!(:url_for).and_return '/bar'
  simple_link.should == "<a href=\"/bar\">Page</a>"
end
于 2012-10-30T23:58:39.520 に答える