【问题标题】:Why minitest case are failing?为什么 minitest 案例失败了?
【发布时间】:2015-07-02 14:07:23
【问题描述】:

MyModel 类:

class Post < ActiveRecord::Base
 validates_presence_of :value
 ...
end

我的 post.yml

one:
  row: 2
  col: 3
  name: 'Test'

我的测试用例

require 'test_helper'
class SimulationsModelTest < ActiveSupport::TestCase

def setup
 @post = Post.new
end

test 'post must have name' do
 @post.name = ' '
 assert @post.valid?
end

结束

为什么上面的测试用例失败了?但是以下测试用例正在通过

test 'post must have name' do
@post.name = ' '
assert_not @post.valid?

结束

在我的模型中,我没有为名称设置presence =&gt; true,那么为什么第一个测试用例失败了?

编辑-1

如果我有两个validates_presence of : value , :name。我的测试用例是:

test 'post must have name' do
 @post.name = 'some'
 @post.value = 'test'
 assert @post.valid?
end

它必须通过测试用例,但它失败了。我在models中没有任何其他必需参数

【问题讨论】:

    标签: ruby ruby-on-rails-3 ruby-on-rails-4 minitest


    【解决方案1】:

    因为@post 仅在它具有value 时才有效,并且在您的测试中您只需为其分配一个name

    在您的模型中:

    validates_presence_of :value
    

    您没有分配value。你不会在任何地方做@post.value = 'some_value'

    编辑:

    前面的: 表示它是代表属性名称的符号。您可以通过这种方式为多个字段定义验证:

    validates_presence_of :value, :name
    

    【讨论】:

    • 感谢@piotr 的解释。你能帮我或给个建议:How to write a test for before_create method in model class?
    • 测试回调很痛苦,这就是为什么很多开发人员不使用它们的原因。这是一个广泛的主题,先研究一下,然后再问另一个问题。
    • 能否请您查看queston的Edit部分
    • 哦!对不起,这是一个拼写错误……我刚刚更新了它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    • 1970-01-01
    • 2014-06-01
    • 1970-01-01
    相关资源
    最近更新 更多