4

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

文档控制器:

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

文档控制器规格:

    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

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

4

2 回答 2

5

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

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

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

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

assigns(:document).id.should eq(@doc.id)
于 2013-02-06T09:21:17.247 回答
1

尝试改变

get :edit, id: @doc

get :edit, id: @doc.id

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

于 2013-02-06T05:58:54.167 回答