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
答案 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
与您的方法之间的最佳方法是什么?