4

我正在进行测试,但在需要 current_user 的页面上遇到了障碍。我在带有 ruby​​ 1.9.3p327 的 rails 3.2.9 中使用 minitest、capybara、factorygirl 和 authlogic。我将 minitest 作为单独的 gem 安装,并且似乎测试环境正常工作。

我有一个创建有效用户的工厂...我在这样的测试中调用该工厂:

  describe "UsersAcceptanceTest" do
    it "must load and include content" do
      FactoryGirl.create(:user)
      visit users_path
      page.must_have_content("cPanel")
    end
  end

FAIL 通知我找不到内容“cPanel”是正确的(cPanel 是可供登录用户使用的链接)。失败错误继续提醒我在“登录,忘记密码,联系”中找不到它......这当然意味着测试正确路由到 users_path,但由于用户未登录而被 authlogic 重定向. 用户无法在我的系统中创建自己,因此在创建时不会自动登录。

如何让工厂与新创建的用户创建新的用户会话?

4

1 回答 1

4

你可以这样做:

  visit signin_path
  fill_in 'email',      with: user.email
  fill_in 'password',   with: user.password
  click_button "Log in"

只需根据您的登录页面结构进行编辑。

我不知道 minitest,但在 rspec 中,我会用这段代码创建单独的方法def sign_in...end并将其放入support\utilities.rb.

然后您的代码将如下所示:

  describe "UsersAcceptanceTest" do
    let(:user) { Factory(:user) }
    subject { page }

    it "must load and include content" do
      sign_in user 
      visit users_path
      it { should have_link("cPanel",   href: cpanel_path) }
    end
  end

如您所见,我对您的代码进行了更多编辑。

于 2012-12-23T03:39:40.110 回答