代码之家  ›  专栏  ›  技术社区  ›  Joe Holloway

Rails中的断言来自模型还是控制器?

  •  6
  • Joe Holloway  · 技术社区  · 17 年前

    在Rails中是否有一种内置的方法来指定断言,如果在开发和测试过程中不变量被破坏,断言将抛出异常?

    编辑:为了清楚起见,我正在寻找可以放置在模型或控制器中的断言,而不是用于单元测试的断言。

    4 回复  |  直到 17 年前
        1
  •  9
  •   Shyam Habarakada    12 年前

    如果你正在编写测试,有许多断言函数。但对于主代码中的assertina,没有任何,你可以很容易地滚动自己的。

    将类似内容添加到 environment.rb :

    class AssertFailure < Exception
    end
    
    def assert(message = 'assertion failed')
      unless block_given? and yield
        raise message
      end
    end
    

    让它成为你的禁忌 environments/production.rb 所以开销很小

    def assert(message = 'assertion failed')
    end
    

    然后,在你的代码中,你可以尽情断言:

    assert { value == expected_value }
    assert('value was not what was expected') { value == expected_value }
    

    如果 value 不等于 expected_value 如果您没有在生产环境中运行,将引发异常。

        2
  •  1
  •   Craig Stuntz    17 年前

    超出 these 你是说?

        3
  •  0
  •   August Lilleaas    17 年前

    提出异常,并使用 rescue_from .

        4
  •  0
  •   Community Mohan Dere    9 年前

    正如@Gordon所说,没有。我最终使用了 solid_assert Jorge Manrubia的宝石,正如这个问题中提到的: Is it idiomatic Ruby to add an assert( ) method to Ruby's Kernel class?