【发布时间】:2014-02-17 16:02:57
【问题描述】:
我正在我的应用中构建一个活动流功能,所有活动都是通过控制器方法创建的。
当控制器方法成功时,活动记录到活动表。由于我的控制器操作是通过 ajax 调用的,因此我尝试直接从我的 rspec 测试中发布。
我试过这个:
Net::HTTP.post_form(URI.parse("http://localhost:5000#{inquiry_path}"), { :id=> @user.id, :type => 'Inquiry' })
这是我在进行 ajax 调用时看到的在我的萤火虫中发布的内容:
id:55
type:Inquiry
url:/user_inquiry
所以我在断言活动计数是否发生了变化:
it "activity count should be changed" do
PublicActivity::Activity.count.should == 1
end
在完成计数已更改的测试后,我希望看到用户主页实际显示新通知。
但是这个测试失败了:
Failure/Error: PublicActivity::Activity.count.should == 1
expected: 1
got: 0 (using ==)
以防万一我将 puts 语句放入控制器中,以检查调用是否实际到达控制器:
puts "Hereeee"
我没有看到消息被打印,所以我猜该请求永远不会到达控制器,这是为什么呢?
我在这里做错了什么,我该如何测试?
【问题讨论】:
-
首先,您可能应该做一个控制器或功能规范(取决于您正在测试的内容)并使用 rspec 方法处理请求,例如
get,post将所有服务器运行时处理为好。除此之外,问题的常见原因可能是您未登录并且您已限制未经授权的用户访问该操作。您应该先登录,然后在请求中添加用户会话。 -
我已经登录了,但这不是问题,我有单独的控制器/功能规格。谢谢
标签: ruby-on-rails ruby rspec capybara