3

このテストが失敗する理由を理解しようとしています。(私はテストを始めたばかりです。) 私は、Shoulda gem を追加した組み込みの Rails テスト フレームワークを使用しています。

テスト:

require 'shoulda'

context "on GET to :new" do

  setup do
    get(:new)
  end

  should_render_template :new
  should_not_set_the_flash

end

失敗:

1) Failure:
test: on GET to :new should render template :new. (SessionsControllerTest)
[/usr/local/lib/ruby/gems/1.8/gems/thoughtbot-shoulda-2.0.6/lib/shoulda/controller   /macros.rb:220:in `__bind_1233882600_699194'
/usr/local/lib/ruby/gems/1.8/gems/thoughtbot-shoulda-2.0.6/lib/shoulda/context.rb:254:in `call'
/usr/local/lib/ruby/gems/1.8/gems/thoughtbot-shoulda-2.0.6/lib/shoulda/context.rb:254:in `test: on GET to :new should render template :new. '
/usr/local/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/testing/setup_and_teardown.rb:94:in `__send__'
/usr/local/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/testing/setup_and_teardown.rb:94:in `run']:
expecting <"new"> but rendering with <"">

2 tests, 2 assertions, 1 failures, 0 errors

しかし、コンソールで実行するとapp.get '/sessions/new'、エラーなしで正常に動作します。

また、" new" テンプレートはブラウザで期待どおりにレンダリングされます。

ハムを使っています。多分それは問題を引き起こしています。私のテンプレートは " new.html.haml" と呼ばれます。

4

2 に答える 2

8

エラーは、テンプレートがレンダリングされていないことを示しています。リダイレクトされていないことを確認してください

should_respond_with :success

@response.body の内容をアサートして、何が返されたかを確認します

# This will fail but should give you some clue about what was sent back.
should "sent something back in the body" do
  assert_match 'boohooo', @response.body
end

特定のテンプレートをアサートすることもできるので、試してみることもできます。

should_render_template "new.html.haml"

ただし、HAML が問題の原因であるとは思えません。

于 2009-02-06T05:37:18.493 に答える
0

私は、Shoulda、Clearance、および Rails 2.3.2 で同様の問題を抱えていました。shouldaとclearanceが「assert_template」を使用する方法を変更することで問題を解決したと思います。これに関連して Rails に未解決のバグがあるようです。

詳細については、このスレッドを参照してください。また、私の変更の差分 (Clearance と Shoulda の両方で 1 行の変更) を参照してください。

http://groups.google.com/group/shoulda/browse_thread/thread/8c0a66c80ff4fd76

于 2009-03-16T22:17:55.253 に答える