如何测试此Rspec Ajax请求

时间:2016-04-13 16:46:39

标签: ruby-on-rails ruby ajax rspec rspec-rails

我正在尝试在show action

中测试scenario方法
def scenarios
  @scenarios ||= fund.present? ? fund.scenarios : []
end

def fund
  @fund ||= funds.find_by(id: fund_id)
end

def fund_id
  return nil unless params.fetch(:report, false)
  params.fetch(:report).fetch(:fund_id, 0)
end

我觉得我需要获取ajax请求并从中获取fund_id的参数但我不确定该怎么做或者这是我想做的事情

这是我在js文件中的ajax请求

$('#geodistributions-filter-form-container')
  .on('change', 'select#report_fund_id', function() {
  $.get('/reports/geodistribution.js',                            
  $(this).parents('form').serialize());
});

我想测试两个上下文

当基金不存在时的

上下文情景'

当基金存在时的

上下文情景'

如果有人可以指出我的方向很好,我不确定如何开始测试。

1 个答案:

答案 0 :(得分:1)

好吧,如果我理解正确,你想测试你的ajax是否通话。您可以使用Capybara之类的验收测试框架,或者只是测试您对/reports/geodistribution.js URL的调用,就像任何其他控制器调用一样。设置所需的环境(使用Fund,不使用Fund)并检查其行为是否正确。

我还会稍微重构一下你的代码:

def scenarios
  @scenarios ||= fund.try(:scenarios) : []
end

def fund
  # if there is no fund found, let it throw an exception
  @fund ||= Funds.find(params[:report][:fund_id])
end