代码之家  ›  专栏  ›  技术社区  ›  Trip

有人能告诉我rspec2在这方面做了什么吗?

  •  0
  • Trip  · 技术社区  · 14 年前

    我一直在尝试深入研究rspec2,但是它自动生成的控制器规范不适用于任何版本的rspec2和任何版本的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'
    

    为什么这个模拟/存根会回来 nil ?

    这是我的控制器的显示方法:

    def show
       @category = Category.find(params[:id])
    
      respond_to do |format|
        format.html # show.html.erb
        format.xml  { render :xml => @category }
      end
    end
    

    2 回复  |  直到 14 年前
        1
  •  0
  •   zetetic    14 年前

    嗯。如果出了什么事,我肯定看不出来。也许是 show 根本没有行动?有吗 before_filter

    controller.should_receive(:show)

    顺便说一句 .as_null_object 告诉mock忽略您没有存根的消息。这有助于处理依赖于验证或其他约束的对象,否则,为了得到可以测试的对象,必须将这些约束去掉。但要注意不要忽略您应该测试的消息。

        2
  •  0
  •   Trip    14 年前

    我试着复制和粘贴脚手架之间的差异,但我完全清除了所有的规格,并重新生成他们的位置。正在卸载 haml ,仅安装 haml-rails 用于轨道3。