【问题标题】:Rails: best way to test an action called remotely?Rails:测试远程操作的最佳方法?
【发布时间】:2010-07-19 17:09:47
【问题描述】:

我再次尝试 Rails,这次是第 3 版,但我在为仅远程调用的操作编写测试时卡住了。

一个具体的例子:

控制器

class PeopleController < ApplicationController
  def index
    @person = Person.new
  end
  def create
    @person = Person.new(params[:person])
    @person.save
  end
end

查看(index.html.erb)

<div id="subscription">
  <%= form_for(@person, :url => { :action => "create" }, :remote => true) do |f| %>
    <%= f.text_field :email %>
    <%= f.submit "Subscribe" %>
  <% end %>
</div>

查看(create.js.erb)

<% if @person.errors.full_messages.empty? %>
  $("#subscription").prepend('<p class="notice confirmation">Thanks for your subscription =)</p>');
<% else %>
  $("#subscription").prepend('<p class="notice error"><%= @person.errors.full_messages.last %></p>');
<% end %>

如何测试远程表单提交?我只是想知道通知消息是否正确显示。但如果我尝试这样做

test "create adds a new person" do
  assert_difference 'Person.count' do
    post :create, :people => {:email => 'test@test.com'}
  end
  assert_response :success
end

它会说“创建”操作缺少模板。

你们通常如何测试远程调用?

【问题讨论】:

    标签: javascript ruby-on-rails unit-testing


    【解决方案1】:

    你能用'xhr'函数代替'post'函数吗?如果您搜索“xhr”,可以在http://weblogs.java.net/blog/2008/01/04/testing-rails-applications 找到一个示例。但即便如此,我很好奇,即使是远程调用,你不需要返回 SOMETHING 吗?即使只是一个好的标题?

    【讨论】:

    • 感谢 jasonpgignac,这解决了我的主要问题,无法提交远程请求。不知何故,我可以找到那个'xhr'方法。就像“assert_response :success”的魅力一样。现在我正在尝试找到一种方法来测试执行的 javascript 的结果。如果提交时有任何错误,我会提出不同的信息。但是在我运行“get :index”和“xhr”方法之后,assert_select 不允许我查询页面的 HTML。知道如何检查是否显示了正确的消息吗?
    • 好吧,澄清一下我明白你在问什么 - 你是否试图测试你的控制器返回的 javascript,作为 xhr 调用的结果?因为您可以测试返回的内容。但是,如果您尝试测试正在页面上运行的 javascript 以查看实际行为是否具有功能性,那就更困难了,您不能告诉它执行 javascript 并查看响应。您可能最好将 Selenium 与 Webrat 一起使用,它实际上会打开浏览器并模拟用户行为。
    • 是的,我想在执行 javascript 后在页面上测试结果。我会检查那些库。再次感谢。
    • 我的荣幸先生!否则,您也可以使用特定于 javascript 的测试框架,例如 QUnit,它可以完成您想要的工作,特别是如果您需要处理非常复杂的 javascript!
    猜你喜欢
    • 1970-01-01
    • 2011-06-05
    • 2023-03-10
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 2021-04-24
    • 2018-08-12
    • 2015-10-01
    相关资源
    最近更新 更多