从respond_to format.csv测试rspec中文件的内容

时间:2013-05-24 18:32:50

标签: ruby-on-rails-3 rspec rspec-rails respond-to

我的控制器中有以下代码导出csv文件

...
  def export
    @filename = 'users.csv'
    @output_encoding = 'UTF-8'
    @users = User.active_users #not the actual scope but this only returns active
    respond_to do |format|
      format.csv
    end
  end
...

我的规格中有以下内容

it "should only return active users"
  get :export, :format => :csv
  # i want to check that my mocked users_controller#export is only returning the active users and not the inactive ones  
end
当我检查时,

response.body在此测试中为空。在浏览器中执行此操作时,如何在下载的规范中获取csv文件,以便检查结果?我试图想出这个问题,我已经碰了一下。

感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:0)

检查是否正在创建CSV文件的测试如下,假设控制器操作位于'csv_create_path'

var obj = {a: 1, b: 2, c: 3};
for(key in obj){
    delete obj[key];
}

console.log(obj);

// Output:
// {}

答案 1 :(得分:-1)

您可以指定支持CSV格式,但不支持内容应该是什么。你可以做到

respond_to do |format|
  format.csv do
    render text: File.read(@filename)
  end
end

实际呈现该CSV文件。

如果您还有相同数据的普通HTML格式视图,则只需

respond_to do |format|
  format.html
  format.csv do
    render text: File.read(@filename)
  end
end

假设您之前已为HTML视图设置了适当的实例变量。