2012-03-08 38 views
2

我一直无法找到很多关于编写好RSpec控制器测试的文档或建议。具体来说,你应该使用Rails的assert_select,它感觉与RSpec非常不同,还是有其他选择?对RSpec控制器测试使用assert_select是否正确?

下面的例子是最佳实践吗?

describe ArticlesController do 
    render_views 
    let(:article) { create(:article) } 

    describe "show" do 
    it "should display the article title" do 
     get :show, id: article 
     response.should be_success 
     assert_select "h1", article.title 
    end 
    end 
end 

我不想编写单独的视图测试,因为这很不方便。

+1

Rspec的的doc住在这里:https://开头WWW .relishapp.com/rspec。但没有什么特别的关于你的问题 – apneadiving 2012-03-08 15:53:39

回答

0

您应该可以使用下面的代码来检查标题内容:

page.should have_selector("h1", :text => article.title) 

UPDATE:正如有人指出的(与-1)的答案是错了,page变量是什么套在拨打visit方法后,由水豚保护(当我回答:P时,我还年轻)。所以这是你在集成测试中使用的东西,而不是你在试图做的功能测试(控制器)中。

简短的回答:不,这是不正确的使用控制器测试assert_select(用于检查请求响应,如果变量被设置,等...)

+0

谢谢,我试过,但'页面'没有在测试中定义。这是与rspec-rails 2.8.1和Rails 3.2。 – 2012-03-08 22:01:00

+0

嗯...你有没有要求'spec_helper'? – 2012-03-08 22:22:44

+0

我是新手,但也许页面变量是通过访问设置的。尝试用访问“articles/show /#{article.id}”替换get:show行“ – 2012-03-08 22:25:56