0

我已经完成了 Hartl 的 Rails 教程中的第 9 章练习。我已经尝试了很长时间,但无法破解问题 6:

登录用户没有理由访问控制器中的newcreate操作。Users如果他们确实尝试访问这些页面,请安排将此类用户重定向到根 URL。

首先,我应该把这些测试放在哪里?目前我正在尝试,user_pages_spec.rb但我不确定这是否正确。然后我应该把逻辑本身放在哪里?

其次,这是我的测试应该是什么样子:

  describe "after signing-in" do
    before { sign_in(user) }
    describe "creating a new user" do
      before { put new_user_path }
      specify { response.should redirect_to(root_url) }
    end
  end

在我执行上述操作的那一刻,RSpec 告诉我

预期的响应是重定向到 http://www.example.com/signin。 

但是当我在浏览器中测试它时,http://localhost:3000/users/new使用登录用户访问时,根本没有重定向(这对我来说更有意义,因为我没有编码)。

我什至从 github 下载了 Hartl 的代码,但我看不到他在哪里/是否包含此功能。

编辑: 我都有

 describe "creating a new user" do
   before { visit new_user_path }
   it { should_not have_selector 'title', text: full_title('Sign Up') }
 end

 describe "creating a new user" do
   before { get new_user_path } # note the use of GET here not PUT
   specify { response.should redirect_to(root_url) }
 end

正常工作。感谢@Peter de Ridder 的帮助

4

1 回答 1

1

我不太确定为什么在调用 new_user_path 时有一个 put 请求。

describe "after signing-in" do
  let(:user) { FactoryGirl.create(:user) }
  before { sign_in user }

 describe "creating a new user" do
   before { get new_user_path }
   specify { response.should redirect_to(root_url) }
 end
end

现在测试应该按预期工作。您仍然必须编写代码才能实际执行重定向。但是,嘿,这就是全部挑战。我个人会检查用户是否登录/存在。如果是这样,应该不再可以访问 new 和 create 操作。

于 2013-02-01T19:31:01.223 回答