最小的测试框架如何在rails中运行?

5 ruby ruby-on-rails minitest ruby-on-rails-3 ruby-on-rails-4

我刚刚开始学习测试,minitest但这对我来说听起来很混乱.这个陈述是什么意思?

test 'should not save simulations without name' do
 post = Post.new
 assert !post.save, 'Saved the simulations without a name'
end
Run Code Online (Sandbox Code Playgroud)

发布模型

class Post < ActiveRecord::Base
  validates_presence_of :name , :type
  belongs_to :user
  before_create :check_validation
  validates :type,  :inclusion => { :in => 1..10, :message => 'The row must be between 1 and 10' }

 private
 def check_validation(data, type)
  ....
 end
Run Code Online (Sandbox Code Playgroud)

minitest以下条件的方法是什么:

  • 检查name,type参数创造了一个新的对象时存在的Post类.我该怎么做post_test课?
  • 难道这test方法是检查存在namepost
  • 我怎样才能check_Validation通过PostTest课堂考试?
  • 如果posts不属于用户,如何检查抛出错误?

我已经创建了post.yml文件和user.yml文件.如何再次进行 我试图阅读ruby官方文档,但它不是很有帮助.

谢谢你的支持

编辑1

我的yml文件

one:
  name: 'test'
  type: 3
  user_id: 1
Run Code Online (Sandbox Code Playgroud)

我试过了 :

test 'Post must have all parameters' do
assert assigns(:one).valid?
Run Code Online (Sandbox Code Playgroud)

结束

Chr*_*tom 1

创建Post类的新对象时检查name、type参数是否存在。我该如何做 post_test 课?

此测试方法是否检查帖子中是否存在姓名?

有点。该断言检查保存新的 Post 实例失败,但导致该结果的原因有多种 - 例如缺少:name属性:typebefore_create可能劫持保存操作的过滤器。

如果您想单独测试每个验证,您需要从已知的有效 Post 记录开始,并对其进行操作以触发每个验证失败。通常,我会在我的装置文件中设置至少一条最低限度有效的记录 - 在这种情况下,我将其称为:mvp. 前任:

test 'MVP is valid' do
  assert posts(:mvp).valid?, 'Minimum valid Post is invalid'
end

test 'should not save simulations without name' do
  post = posts(:mvp)
  post.name = nil
  assert post.invalid?, 'Post is valid without a name'
end

...
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,我发现测试简单的验证(存在、简单的数字等)会让我的测试变得混乱,而且有点像测试框架而不是我自己的应用程序代码,所以我经常会跳过它们。

如何通过 PostTest 类测试 check_Validation?

check_validation被标记为私有方法,一般情况下,你不想直接测试私有方法。但是,您可以验证在新创建的模型上设置的条件是否符合您的期望:

test 'newly created Post has settings XYZ' do
  post = Post.new(...)
  assert post.save, 'Post could not be saved'
  # assertions to test #check_validations side effects here...
end
Run Code Online (Sandbox Code Playgroud)

您没有包含方法的主体check_validation,所以我不知道您在这里的想法。不过,有了这样的名称,我倾向于相信您正在尝试进行某种验证,最好将其留给使用该方法定义的自定义验证方法validate。请参阅文档以了解它是否适​​用于您的情况。

如果帖子不属于用户,如何检查抛出错误?

我会将其作为您的 Post 课程的验证条件:

class Post
  belongs_to :user
  validates  :user, presence: true
end
Run Code Online (Sandbox Code Playgroud)

希望能有所帮助。我试图以一种能让您继续工作的方式回答您的问题,但如果您有兴趣学习如何使用 Rails 和 Minitest 提高工作效率,您将需要更深入地研究框架以及它如何与 Rails 一起使用。