我一直试图深入研究RSpec 2,但其自动生成的控制器规格不适用于任何版本的RSpec 2以及任何版本的Ruby或任何版本的Rails。也许我错过了一些明显的东西?
def mock_category(stubs={})
@mock_category ||= mock_model(Category, stubs).as_null_object
end
describe "GET show" do
it "assigns the requested category as @category" do
Category.stub(:find).with("37") { mock_category }
get :show, :id => "37"
assigns(:category).should be(mock_category)
end
end
这是从rails g scaffold Category
RSpec返回:
Failures:
1) CategoriesController GET show assigns the requested category as @category
Failure/Error: assigns(:category).should be(mock_category)
expected Category_1002, got nil
# ./spec/controllers/categories_controller_spec.rb:21
# /Library/Ruby/Gems/1.8/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:239:in `inject'
为什么这个mock / stub返回nil
?
更新
这是我控制器的show方法:
def show
@category = Category.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @category }
end
end
谢谢!
答案 0 :(得分:0)
嗯。好吧如果出了什么问题,我肯定不会看到它。也许根本没有达到show
行动?是否有任何before_filter
陈述妨碍了?
您可以尝试添加一些测试以查看是否已达到作业。像
controller.should_receive(:show)
btw .as_null_object
告诉模拟忽略你没有存根的消息。这有助于依赖于验证或其他约束的对象,否则您必须为了获得可以测试的对象而必须存根。但请注意不要忽略您应该测试的消息。
答案 1 :(得分:0)
RSpec在Rails3 beta和RSpec 2 beta.10到Rails3版本和RSpec 2 beta.20之间存在一些严重冲突。
我尝试复制并粘贴脚手架之间的差异,但我通过删除所有规格并重新生成它来完全清除了这一点。卸载haml
,仅为rails 3安装haml-rails
。
所有规格现在都在运行。