如何编写rspec以根据指定的日期范围过滤帖子

时间:2018-09-06 05:13:54

标签: ruby-on-rails rspec

我有一个简单的博客应用程序,用户可以根据日期范围(开始日期和结束日期)过滤帖子。我使用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

1 个答案:

答案 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 

然后根据您的要求期待响应