Ruby on rails Rails功能测试assert\u select在AJAX post之后找不到任何内容

Ruby on rails Rails功能测试assert\u select在AJAX post之后找不到任何内容,ruby-on-rails,ruby,testing,assert,xmlhttprequest,Ruby On Rails,Ruby,Testing,Assert,Xmlhttprequest,在Rails 2.3.2上,我尝试在功能测试中测试视图 def test_view get :form xhr :post, :add_to_cart, {:id => 1} post :create, {:param => value} assert_select 'title', 'Success!' end 但是不断地失败: 应至少有1个元素与标题匹配,找到0。 事实并非如此 我知道您不能在xhr调用后使用“assert\u select”,但在本例中,我是在常规po

在Rails 2.3.2上,我尝试在功能测试中测试视图

def test_view
 get :form
 xhr :post, :add_to_cart, {:id => 1}
 post :create, {:param => value}
 assert_select 'title', 'Success!'
end
但是不断地失败:

应至少有1个元素与标题匹配,找到0。 事实并非如此

我知道您不能在xhr调用后使用“assert\u select”,但在本例中,我是在常规post请求后使用它的

如果我放弃xhr请求

def test_view
 get :form
 post :create, {:param => value}
 assert_select 'title', 'Success!'
end
然后它像魅力一样工作。 我可以手动设置存储在会话中的购物车,但这样我就不会真正测试视图


有什么想法吗?

我想你已经弄明白了-功能测试需要一个控制器动作,而不是多个动作。我建议将其替换为。

我想您已经找到了答案-功能测试需要单个控制器操作,而不是多个操作。我建议将其替换为。

如果您发出xhr请求,则@response.content\u type=='text/javascript'和assert\u select将无法使用它。要使其正常工作,您必须将内容类型更改为“text/html”,如下所示:

xhr(:get, something)
@response.content_type = 'text/html'
assert_select 'title', 'Success!'

如果发出xhr请求,则@response.content\u type=='text/javascript'和assert\u select将无法使用它。要使其正常工作,您必须将内容类型更改为“text/html”,如下所示:

xhr(:get, something)
@response.content_type = 'text/html'
assert_select 'title', 'Success!'

我也有同样的问题。如上所述,它来自于ActionController将内容类型设置为文本javascript,而assert_select可用于文本/html。设置它的更好方法不是在测试中混入@response,而是在控制器中,如下所示:

respond_to do |format| 
  format.html {...}
end

这将强制内容类型为text/html。

我也有同样的问题。如上所述,它来自于ActionController将内容类型设置为文本javascript,而assert_select可用于文本/html。设置它的更好方法不是在测试中混入@response,而是在控制器中,如下所示:

respond_to do |format| 
  format.html {...}
end

这将强制内容类型为text/html。

您可以通过功能测试测试任意多个操作。如果您想检查某个操作是否成功,即post:update、get:show、format::json,那么这很有意义。您可以通过功能测试测试任意数量的操作。如果您想检查某个操作是否成功,也就是post:update、get:show、format::json,这是有意义的。如果这仍然有效,我想知道为什么。当我看到返回的文本时,它不是HTML,而是一个巨大字符串中包含HTML的JavaScript。如果这仍然有效,我想知道为什么。当我看到返回的文本时,它不是HTML,而是一个巨大字符串中包含HTML的JavaScript。