首页 > 解决方案 > 使用 rspec(ruby 项目)编写文件验证规范

问题描述

这两个测试用例失败,

describe 'validations' do
  it { should validate_presence_of :file }
  it { should validate_presence_of :save_path }
end

这是我正在测试的课程,

class ConvertFileToPdf < Base
  attr_accessor(
    :file,
    :save_path
  )
  validates_presence_of(
    :file,
    :save_path
  )

  def path
    '/Convert/ConvertFileToPdf'
  end

  def save_path
    @save_path ||= File.join(File.dirname(file), "#{File.basename(file, ".*")}.pdf")
  end

  def call_api
    client.multipart_post(
      path,
      file_name: File.basename(file),
      file: File.open(file, 'rb'),
    ) do |request|
      download(request, save_path)
    end
  end
end

失败的测试用例

标签: ruby-on-railsruby

解决方案


在对 执行存在性检查时save_path,将调用相应的读取器方法。在此期间,如果file未填写有效值,则组合 fromFile.dirname将失败。

您可能应该在您的save_path方法中添加一个保护子句:

def save_path
   return if file.nil?
   @save_path ||= File.join(File.dirname(file), "#{File.basename(file, ".*")}.pdf")
end

推荐阅读