我有一个简单的博客应用程序,用户可以根据日期范围(开始日期和结束日期)过滤帖子。我使用AJAX调用在索引页面中显示帖子。一旦用户使用两个日期选择器指定了日期范围,然后单击“提交”按钮,就会进行AJAX调用,并显示已过滤的帖子。开发方面没有问题,但是在进行测试的情况下,我不知道如何进行进一步操作。但我的目标是检查天气,索引页面中显示的帖子是否在指定的日期范围内。我已经在post控制器中定义了datefilter动作:
def dateFilter
if (params[:start_date].present? )&& (params[:end_date].present?)
if Time.parse(params[:start_date])<=Time.parse(params[:end_date])&& (Time.parse(params[:start_date])<= Date.today)&& (Time.parse(params[:end_date])<= Date.today)
@start_date= params[:start_date].to_date.beginning_of_day
@end_date=params[:end_date].to_date.end_of_day
else
@error = true
end
else
@start_date= Date.yesterday.beginning_of_day
@end_date=Date.today.end_of_day
end
@posts= Post.date_filter(@start_date,@end_date)
end
<%= form_tag({:controller => 'posts', :action => 'dateFilter'},remote: true) do %>
<%= date_field_tag 'start_date' %>
<%= date_field_tag 'end_date' %>
<%= submit_tag 'Submit' %>
<% end %>
<% end %>
进行AJAX调用时,会将帖子呈现为js文件datefilter.js.erb
<% if @error==true %>
alert("enter correct date format");
<% elsif @posts.blank? %>
alert("No posts in the given date");
<%else %>
$('.post_div').html('<%= j render @posts %>')
<% end %>
$('#page').hide()
在上述情况下帮助我编写rspec
答案 0 :(得分:1)
您可以使用带有指定日期的“先行”操作创建多个帖子,并使用已知具有指定帖子数的日期范围调用控制器操作,并检查响应中预期的帖子数
例如
@post1 = FactoryBot.create(:post, start_date: DATE)
@post2 = FactoryBot.create(:post, start_date: DATE) //Using Factory
let(:data) = {
start_date: Date,
end_date: Date}
get:CONTROLLER_ACTION params: data
然后根据您的要求期待响应