【问题标题】:Mixed up with rspec assigns while testing controller在测试控制器时与 rspec 分配混合
【发布时间】:2013-02-06 00:23:45
【问题描述】:

我正在尝试处理测试控制器,但到目前为止,我似乎被困在最简单的问题上。

documents.controller:

    def edit
      @document = Document.find(params[:id])
    end

documents_controller_spec:

    describe 'GET #edit', focus: true do
      before(:each) { @doc = FactoryGirl.create(:document)}

      it "should assign @document to the document" do
        get :edit, id: @doc
        assigns(:document).should eq(@doc)
      end
    end

总是返回 false。 @document 总是分配为零。我尝试将 params[id] 指定为 @doc.id,但这并不能解决任何问题。我在这里做错了什么?

【问题讨论】:

    标签: ruby-on-rails rspec controller assign


    【解决方案1】:

    从 rspec 的角度来看,您在行中比较的两个文档(分配给 @doc):

    assigns(:document).should eq(@doc)
    

    不一样 - 它们在数据库中具有相同的 ID,但是您要比较的实际 ruby​​ 对象是不同的,因为一个是在您的“之前”块中创建的,而另一个可能是在您的控制器内部实例化时GET 请求在您的测试中执行。

    我的猜测是以下将起作用:

    assigns(:document).id.should eq(@doc.id)
    

    【讨论】:

    • 噢噢噢噢!这很有意义!我完全忘记了这一点。谢谢!
    【解决方案2】:

    尝试改变

    get :edit, id: @doc
    

    get :edit, id: @doc.id
    

    基本上,它只需要 id 来构建路由。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多