问题 即使使用config.render_views,RSpec response.body仍然是空的


在我的spec_helper.rb文件中,我专门将它设置为config.render_views但是我回来的response.body仍然是空的。这是我的基本规格

describe  "#index" do
    it "should list all rooms" do
      get 'index'
      stub(Person).all
    end

    it "responds with 200 response code" do
      response.should be_ok
    end

    it "renders the index template" do
      pp response.body
      response.should render_template("people/index")
    end

  end

还有什么可以缩短这种行为吗?我通过浏览器时很好。我在Rspec 2.5.0上


12114
2018-05-03 20:39


起源



答案:


你尝试过吗? render_views 在您的控制器spec文件中?这对我行得通。

我注意到的另一件事是你只在测试用例中访问索引页面 - 第一个是准确的。其余的将返回空的html内容,因为没有响应。

这就是我将如何实现它。但如果你已经有了 config.render_views 在* spec_helper.rb *文件中,如果有效,你可以不用 render_views 在控制器规范中。

describe MyController
    render_views

    before :each do
        get :index
    end

    describe  "#index" do
        it "should list all rooms" do
            stub(Person).all
        end

        it "responds with 200 response code" do
            response.should be_ok
        end

        it "renders the index template" do
            pp response.body
            response.should render_template("people/index")
        end
    end
end

编辑: 这里的微妙变化是 before 我称之为blobk get :index 为每一个人 it 块。


7
2018-05-17 01:26



是的,我尝试过两种方式。 - CountCet
您是否通过包含来修复代码? get :index 每一个 it 块? - iGbanam
你当然需要 get :index 在每次测试中,或者更好,在 before 正如@Yasky所示。你的 stub 它在测试中也没有做任何事情 get 将无效。你也没有从存根中返回任何东西。 - Jim Stewart


答案:


你尝试过吗? render_views 在您的控制器spec文件中?这对我行得通。

我注意到的另一件事是你只在测试用例中访问索引页面 - 第一个是准确的。其余的将返回空的html内容,因为没有响应。

这就是我将如何实现它。但如果你已经有了 config.render_views 在* spec_helper.rb *文件中,如果有效,你可以不用 render_views 在控制器规范中。

describe MyController
    render_views

    before :each do
        get :index
    end

    describe  "#index" do
        it "should list all rooms" do
            stub(Person).all
        end

        it "responds with 200 response code" do
            response.should be_ok
        end

        it "renders the index template" do
            pp response.body
            response.should render_template("people/index")
        end
    end
end

编辑: 这里的微妙变化是 before 我称之为blobk get :index 为每一个人 it 块。


7
2018-05-17 01:26



是的,我尝试过两种方式。 - CountCet
您是否通过包含来修复代码? get :index 每一个 it 块? - iGbanam
你当然需要 get :index 在每次测试中,或者更好,在 before 正如@Yasky所示。你的 stub 它在测试中也没有做任何事情 get 将无效。你也没有从存根中返回任何东西。 - Jim Stewart


我有同样的问题。

解决方案是指定请求的格式。

例如: get :some_action, some_param: 12121, format: 'json'


3
2018-06-07 15:47





这已从RSpec 1更改为RSpec 2.查看规格现在使用 rendered 代替 response

rendered.should =~ /some text/

更多信息 在github上发布说明


0
2018-05-17 06:13



我不是一个视图规范,它是一个控制器规范,文档仍然显示以这种方式处理响应 - CountCet
嗯。如果你放,它会起作用吗 render_views 在这个例子中? - zetetic