почему контроллер var не доступен в тесте? - PullRequest
0 голосов
/ 05 февраля 2012

Я пытаюсь следовать учебнику Майкла Хартла по Ruby on Rails в http://ruby.railstutorial.org/chapters/sign-in-sign-out,, но с некоторыми изменениями на практике, прежде всего, с некоторыми изменениями и каркасом Test :: Unit.В этом уроке используется RSpec, а я пытаюсь придерживаться Test :: Unit + Shoulda-context.

В главе 9 мне предлагается пройти некоторые функциональные тесты, в которых используется переменная, называемая «контроллер»', но мои тесты не работают, поскольку они обнаруживают, что "контроллер" не существует.Вот что я получаю:

marcel @ pua: ~ / Desenvolupament / Rails3Examples / ror_tutorial $ rake test: недавний загруженный пакет /home/marcel/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.9.2.2/lib/rake/rake_test_loader Запущено F ============================================================================================ Ошибка: test: POST«Создать» с действительным входом (адрес электронной почты и пароль) следует перенаправить на страницу пользователя.(SessionsControllerTest) [test / functions / session_controller_test.rb: 58]: Ожидается, что хотя бы 1 элемент соответствует «title», найден 0. Это не так.=============================================================================== E =============================================================================== Ошибка: test: POST 'create' с действительным именем входа (адрес электронной почты и пароль) должен войти в систему пользователя.(SessionsControllerTest): NameError: неопределенная локальная переменная или метод `controller 'для

test/functional/sessions_controller_test.rb:53:in `block (3 levels) in <class:SessionsControllerTest>'

====================================================================================== Закончено за 0.957865676 секунд.7 тестов, 6 подтверждений, 1 сбоев, 1 ошибок, 0 ожиданий, 0 пропусков, 0 уведомлений 0% пройдено 7,31 тестов / с, 6,26 подтверждений / с рейка отменено!Команда завершилась неудачно со статусом (1): [/home/marcel/.rvm/rubies/ruby-1.9.2-p290/b ...] Задачи: TOP => test: недавний (Просмотр полной трассировки при запуске задачи с -trace)

Это оригинальный (RSpec) тест:

describe SessionsController do
  ...
  describe "POST 'create'" do
    ...
    describe "with valid email and password" do
      before(:each) do
        @user = Factory(:user)
        @attr = { :email => @user.email, :password => @user.password }
      end

      it "should sign the user in" do
        post :create, :session => @attr
        controller.current_user.should == @user
        controller.should be_signed_in
      end

      it "should redirect to the user show page" do
        post :create, :session => @attr
        response.should redirect_to(user_path(@user))
      end
    end
  end
end

, и это мой перевод (в Test :: Unit + Sholuda-context) теста:

class SessionsControllerTest < ActionController::TestCase
  context "POST 'create'" do
    context "with valid signin (email and password)" do
      setup do
        @attr = {email: "test@email.tst",  password: "testpwd"}
        @user=User.create! @attr.merge!({name: "test_user", password_confirmation: "testpwd"})
      end

      should "sign in the user" do
        post :create, :session => @attr
        assert_equal @user, controller.current_user
      end

      should "redirect to the user show page" do
        post :create, :session => @attr
        assert_select "title", /Show/
      end
    end
  end
end

Кто-нибудь знает, как заставить мой тест работать?

1 Ответ

1 голос
/ 08 февраля 2012

Глядя на официальное руководство по тестированию Rails на http://guides.rubyonrails.org/testing.html, Я видел, что переменная экземпляра @controller включена в функциональных тестах. Итак, версия Test :: Unit должна быть:

should "sign in the user" do
  post :create, :session => @attr
  assert_equal @user, @controller.current_user
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...