1

我正在尝试在不加载整个 Rails 应用程序的情况下测试模型。我只想包含与我正在测试的课程相关的导轨部分。如何正确要求 active_model/validations?我以为我做对了,但是下面的设置抛出了这个错误:

undefined method `validate' for Project::Media:Class (NoMethodError)

正在测试的模型:

#app/models/project/media.rb

class Project::Media < Project  #Project inherits from ActiveRecord::Base

  validate :allowable_media_source

  before_save : classify_link

  #next, all the methods

end

规格:

#spec/models/project/media_spec.rb

class ActiveRecord
  class Base; end
end

class Project; end

require_relative '../../../app/models/project/media.rb'
require 'active_model/validations'

describe Project::Media do
  #then tests 
end
4

2 回答 2

1

您的测试不起作用,因为Project(在您的测试中)没有继承自ActiveRecord::Base,所以它没有validate方法。要求 ActiveModel 验证只是使ActiveModel模块可用,您需要将其实际包含在您的类中以使其方法可用,如下所示:

class Project
  include ActiveModel::Validations
end

本文中有关单独使用 ActiveModel 的更多信息。

更多参考:

于 2013-01-28T22:07:04.590 回答
0

根据 Shioyama 的帖子,我最终不得不要求我需要的东西。这就是它的样子。

require 'active_model'
require 'active_model/validations'
require 'active_record/callbacks'
class Project
  include ActiveModel::Validations    
  include ActiveRecord::Callbacks
end

require_relative '../../../app/models/project/media.rb'

#then tests
于 2013-01-29T02:14:07.703 回答