Rspec,设计,工厂女孩 - 如何通过Rspec控制器测试登录工厂用户?

时间:2011-11-28 19:47:52

标签: rspec controller devise factory-bot

我有一个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

我也在使用工厂女孩。该错误是由before_filter except参数引起的。我需要能够使用工厂用户在rspec中登录用户。如何在Rspec控制器测试中签署Factory用户?如何定义Factory用户?

我在我的工厂里试过这个.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 个答案:

答案 0 :(得分:7)

我强烈建议您删除控制器测试并使用Cucumber故事 - RSpec不像Cucumber那样方便测试面向用户的内容。

在Cucumber中,您希望通过UI登录以模拟用户将要执行的操作。我倾向于在控制器规范中做同样的事情,尽管有些人可能更喜欢嘲笑事物。

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