Испытание Следует в Rails 3: следует ответить: с успехом - PullRequest
2 голосов
/ 01 февраля 2011

У меня есть некоторые проблемы с тестированием в Rails 3. В настоящее время я обновляю приложение Rails2 до Rails3.Я использую musta для тестирования.В моих функциональных тестах я тестирую с musta, чтобы GET отвечал с успехом

context "GET to :blame" do
  should "mark a song as blamed" do
    get :blame, :id => @song.id
    assert_equal Blame.count, 1
    get :blame, :id => @song.id
    assert_equal Blame.count, 2
  end
  should respond_with :success
end

В следующей за последней строкой я получаю следующую ошибку при выполнении функциональных тестов с помощью rake test:функционалы:

  1) Error:
test: a visitor GET to :blame should respond with 200. (SongsControllerTest):
NoMethodError: undefined method `response_code' for nil:NilClass
    /Users/23tux/.rvm/gems/ruby-1.9.2-p136@rails3/gems/activesupport-3.0.3/lib/active_support/whiny_nil.rb:48:in `method_missing'
    /Users/23tux/.rvm/gems/ruby-1.9.2-p136@rails3/gems/shoulda-2.11.3/lib/shoulda/action_controller/matchers/respond_with_matcher.rb:57:in `response_code'
    /Users/23tux/.rvm/gems/ruby-1.9.2-p136@rails3/gems/shoulda-2.11.3/lib/shoulda/action_controller/matchers/respond_with_matcher.rb:48:in `correct_status_code?'
    /Users/23tux/.rvm/gems/ruby-1.9.2-p136@rails3/gems/shoulda-2.11.3/lib/shoulda/action_controller/matchers/respond_with_matcher.rb:30:in `matches?'
    /Users/23tux/.rvm/gems/ruby-1.9.2-p136@rails3/gems/shoulda-2.11.3/lib/shoulda/assertions.rb:53:in `assert_accepts'
    /Users/23tux/.rvm/gems/ruby-1.9.2-p136@rails3/gems/shoulda-2.11.3/lib/shoulda/context.rb:324:in `block in should'
    /Users/23tux/.rvm/gems/ruby-1.9.2-p136@rails3/gems/shoulda-2.11.3/lib/shoulda/context.rb:382:in `call'
    /Users/23tux/.rvm/gems/ruby-1.9.2-p136@rails3/gems/shoulda-2.11.3/lib/shoulda/context.rb:382:in `block in create_test_from_should_hash'

Я использую Ruby 1.9.2, Rails 3.0.3 и Shoulda 2.11.3.Надеюсь, кто-нибудь может мне помочь.

спасибо, смокинг

1 Ответ

2 голосов
/ 21 августа 2011

Два блока следует запускать отдельно, и не будет сделан запрос для response_with отсюда ошибка. Вам нужно будет сделать запрос в блоке установки, таком как:

context "GET to :blame" do
  setup do
    get :blame, :id => @song.id
  end
  should "mark a song as blamed" do
    assert_equal Blame.count, 1
  end
  should respond_with :success
end
...