Rspec、Devise和Factory Girl - 如何通过Rspec控制器测试登录Factory用户?

8
我有一个Posts控制器,刚刚安装了Devise以快速简便地添加一些身份验证。在安装Devise之前,我已经为我的Posts控制器的“new”操作创建了一些测试。安装Devise后,我的测试失败了,直到我添加了

标签。
config.include Devise::TestHelpers, :type => :controller

将以下内容添加到我的spec_helper.rb文件中。
同时,我还有以下这行代码。
before_filter :authenticate_user!, :except => [:show, :index]

在我的PostsController中。
现在当我运行我的测试时,它们都通过了,除了这两个:
it "should be successful" do
     get :new
     response.should be_success
  end

  it "should have the right title" do
     get :new
     response.should have_selector('title', :content => @base_title + " | New post")
  end

我也在使用Factory Girl。错误是由before_filter except参数引起的。我需要能够使用工厂用户在Rspec中登录用户。我如何在Rspec控制器测试中登录Factory用户?我如何定义Factory用户?
我已经在我的factories.rb文件中尝试了这个:
Factory.define :user do |user|  
  user.name                  "Test User"
  user.email                 "user@example.com"
  user.password              "password"
  user.password_confirmation "password"
end

但是我收到了错误提示:
NoMethodError:
   undefined method `password_salt=' for #<User:0x00000103cac958>

非常感谢您的帮助。谢谢。

1个回答

7

我强烈建议删除您的控制器测试,改为使用Cucumber故事 -- 相比之下,RSpec不如Cucumber方便用于测试用户界面的东西。

在Cucumber中,您需要通过UI登录以模仿用户的操作。我倾向于在控制器规范中执行相同的操作,尽管有些人可能更喜欢模拟一些东西。

至于undefined method password_salt=,您是否迁移了测试数据库?


这是我在帖子控制器中的一个测试 before(:each) do @user = create!(Factory(:user)) test_sign_in(@user) end - Jack
应该使用Factory :user,而不是create!(Factory(:user))Factory已经创建了记录。 - Marnen Laibow-Koser
PostsController测试......describe "GET 'new'" do before(:each) do @user = Factory :user end it "应该成功" do get :new response.should be_success end end .....factories.rb.....`Factory.define :user do |user| user.name "测试用户" user.email "user@example.com" user.password "password" user.password_confirmation "password"end` - Jack
好的。看一下错误信息。它告诉你User#name=未定义。再次确认,这可能意味着你忘记迁移测试数据库了... - Marnen Laibow-Koser
1
我现在会给你点赞,但是我的声望值还不够,不能给你点赞。 - Jack
显示剩余11条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接