使用Capybara / Rspec测试登录

das*_*ots 1 capybara rspec2 ruby-on-rails-3

我在测试我的登录过程时遇到了一些困难。目前,我有以下请求规范:

     describe "GET /admins" do
        before(:each) do
          @admin = Factory.create(:user, :winery => nil, :email => 'admin@example.com', :admin => true)
          @attr = { :email => @admin.email, :password => @admin.password }
        end


    it "should log admin users in" do
      visit admin_path
      post_via_redirect admin_path, :session => @attr
      save_and_open_page
      page.should have_content('Admin Dashboard')
    end
  end
Run Code Online (Sandbox Code Playgroud)

这失败了,save_and_open_page只显示我的登录页面(我可以正常登录到我的开发站点,因此实际的代码有效)。我也尝试使用Capybara填写规格并填写表格,然后单击“登录”按钮,但同样失败。我已经能够用黄瓜写一个合格的规范,但是只能用硒。

使用:水豚(0.4.1.2)Rspec(2.5.0)rspec-rails(2.5.0)导轨(3.0.5)

谢谢

Rya*_*igg 5

您应该在这里使用纯Capybara助手,这post_via_redirect是一种Rails方法。您首先要填写表单,然后按某种提交按钮,如下所示:

visit admin_path
fill_in "Login", :with => "username"
fill_in "Password", :with => "password"
click_button "Submit"
Run Code Online (Sandbox Code Playgroud)

您的最后一个断言是,我会更加精确地说出应该在哪个选择器中显示该内容,如下所示:

within_scope("h1") do
  page.should have_content('Admin Dashboard')
end
Run Code Online (Sandbox Code Playgroud)

现在,您正在正确测试!