gpt4 book ai didi

ruby-on-rails - Capybara JavaScript 测试的 XHR 请求 stub

转载 作者:行者123 更新时间:2023-12-01 00:32:47 26 4
gpt4 key购买 nike

我正在尝试编写一个 request_spec 来测试页面的功能,该表单使用执行 ajax 自动完成查找并返回有效结果以激活提交按钮的表单。

我想知道是否有人有同样的问题并找到某种方法或引用来使此测试通过。

gem 文件

gem 'rake', '0.8.7'
gem 'rails', '2.3.5'
group :test do
gem "capybara", :git => "git://github.com/jnicklas/capybara.git"
gem 'rspec', '1.3.1'
gem 'rspec-core'
gem 'rspec-rails', '1.3.2'
gem 'webmock', '1.4.0'
end

HTML

    ...
<fieldset>
<label>Enter a Destination</label>
<%= text_field_tag :reviewable_name, nil, :id => "destination_autocomplete", :class => 'textfield' %>
<ul>
<li>
<h3 class="disabled">
<%= submit_tag "Read reviews", :id => "read_a_destination_review", :name => "agree", :class => "read_review", :disabled => false %>
</h3>
</li>
<li class="or">or</li>
<li>
<h3>
<%= submit_tag "Write review", :id => "write_a_destination_review", :name => "agree", :class => "write_review", :disabled => false %>
</h3>
</li>
</ul>
</fieldset>
...

JavaScript(jQuery 1.4.4)

  ...
$("#hotel_autocomplete, #destination_autocomplete").autocomplete({
source: function(request, response){
$.getJSON('/ajax/search_reviewable?type=destination&q=' + request.term,
function(results, status){
if(status == 'success'){
//make it regex safe
var term = request.term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1");
term = term.split(' ').join('|');
for(var i = 0; i < results.length; i++){
results[i].value = results[i].label;
results[i].label = results[i].value.replace(new RegExp("("+term+")", "gi"),'<strong>$1</strong>');
}
response(results);
}
}
);
},
minLength: 3,
delay: 500,
select: function( event, ui ) {...}
});
...

JSON 响应

/ajax/search_reviewable?type=destination&q=佛罗里达

[{"label":"Florida","id":124}]

RSpec 测试

    it "should activate submit button", :js => true do
stub_request(:get, "/ajax/search_reviewable/type=destination&q=florida").to_return(:body => %Q{[{"label":"Florida","id":124}]}, :headers => {"Content-Type" => "applicaation/json; charset=utf-8", "Accept" => "*/*"})
fill_in("destination_autocomplete", :with => "florida")
page.execute_script(%Q{$("#destination_autocomplete").trigger("keyup");})
find(".ui-menu-item a").click
# should post to '/review/new', :id => 124
page.should have_content("Write a Destination Review")
end

测试失败,因为此规范无法在 JavaScript 中 stub XHR 请求。

感谢您的评论回复和帮助。

最佳答案

我设法找到解决这个问题的方法。

实际发生的情况是,AJAX 请求的页面 /ajax/search_reviewable?type=destination&q=$1 正在向另一个服务发出 Net::HTTP 请求。

这个请求需要用我需要的响应来 stub 。

stub_request(:get, ".../all_by_partial_name/Florida/").to_return({
:body => %Q{[{"label":"Florida","id":124}]},
:headers => {"Content-Type" => "applicaation/json; charset=utf-8", "Accept" => "*/*"}
})

经过一些重大研究,我发现你必须在 JavaScript 中触发一个事件才能通过测试。

来源。 Clicking AutoComplete Options Gist

现在规范示例如下所示

before(:each) do
stub_request(:get, ".../all_by_partial_name/Florida/").to_return({
:body => %Q{[{"label":"Florida","id":124}]},
:headers => {"Content-Type" => "applicaation/json; charset=utf-8", "Accept" => "*/*"}
})
end

it "should activate submit button and direct to new review", :js => true do
fill_in("destination_autocomplete", :with => "florida")
sleep 2
page.execute_script(%Q{$(".ui-menu-item a:eq(0)").trigger("mouseenter").click();})
find_button("write_a_destination_review").click
page.should have_content("Write a Destination Review")
end

我希望这可以帮助您解决 RSpec JQuery 问题。

关于ruby-on-rails - Capybara JavaScript 测试的 XHR 请求 stub ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7024434/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com