factory_girl,devise,rpsec 2.0和rails 3.0 =>的问题无法获得rspec来验证控制器

时间:2010-11-02 06:03:16

标签: ruby-on-rails-3 devise rspec2

github How To: Test (devise) with Rails 3 and RSpec 上有一些资源。 但是如何达到非常高的水平,我不能让它在我的背景下工作。 将所有这些部分连接在一起以管理以测试需要已登录用户的控制器的正确方法是什么(before_filter:authenticate_user!)???

现在我尝试在单个控制器上运行rspec ..

require File.dirname(__FILE__) + '/../spec_helper'
describe ArticlesController do
  fixtures :all
  render_views

  before (:each) do
    @user = Factory.create(:user)
    sign_in @user
  end

  it "index action should render index template" do
    get :index
    response.should render_template(:index)
  end
end

这是我运行rspec时的输出

Failures:
  1) ArticlesController index action should render index template
     Failure/Error: Unable to find matching line from backtrace
     SQLite3::ConstraintException: articles.user_id may not be NULL

2 个答案:

答案 0 :(得分:0)

在你的灯具中看起来像是一个错误。错误消息表示如果没有user_id,则无法创建文章。

您可以修复灯具,也可以通过删除fixtures :all并删除查找方法来避免使用它们:

before(:each) do
  @user = Factory.create(:user)
  sign_in @user
  Article.stub(:find).and_return([])
end

这告诉find返回一个空数组,您的控制器索引操作应该分配给@articles实例变量以便在模板中使用。这应该足以让模板无错误地呈现。

答案 1 :(得分:0)

我修理了夹具或者应该这样说工厂:

Factory.define :article do |e|
  e.name "Article001"
  e.user { |u| u.association(:user) }
end

给我这个新错误......

Failures:
  1) ArticlesController index action should render index template
     Failure/Error: response.should render_template(:index)
     expecting <"index"> but rendering with <"devise/mailer/confirmation_instructions">.
     Expected block to return true value.

我只是想看看我的测试我的文章控制器的索引方法通过。我指出我对用户创建不感兴趣。错误告诉我用户已经创建。

我尝试了你的建议但是停止了“存根”

Failure/Error: Asset.stub(:find).and_return([])
     undefined method `stub' for #<Class:0x000000048310b8>

fixture:all与您的方法之间的最佳方法是什么?