“test do”语法的含义

时间:2012-06-24 16:41:51

标签: ruby-on-rails ruby

如果我的问题很愚蠢,我很抱歉,因为我只想问一下Ruby中的含义是什么。 (我正在为我的课程尽快读一本关于Rails的书,所以我对Ruby语言没有把握。)

这是一段用于单元测试目的的代码:

class ProductTest < ActiveSupport::TestCase
  test "product attributes must not be empty" do   // this line I don't know
    product = Product.new
    assert product.invalid?
    assert product.errors[:title].any?
    assert product.errors[:description].any?
    assert product.errors[:price].any?
    assert product.errors[:image_url].any?
  end

我想问的是:在我不知道的那一行,语法test "...." do,它是什么意思?它是一个函数,方法,类,还有什么?

2 个答案:

答案 0 :(得分:2)

这是一个块。在测试框架的某个地方定义了这个方法:

def test(description, &block)
  # do something with block
end

高度建议您选择一本优秀的Ruby书,然后慢慢阅读

答案 1 :(得分:2)

这个东西被称为类宏,一个简单机制的奇特名称:

这是一个类方法(def self.test),这样你可以直接在你的类定义中使用它。例如。

编写测试用例的正常方法(在Test :: Unit中)更像是这样:

def test_something_interesting
  ...
end

但是,ActiveSupport(Rails的一部分)为您提供了这种语法糖,以便您可以这样写:

test "something interesting" do
  ...
end

然后,此方法将定义名为test_something_interesting的方法。

您可以在Rails中找到实现:

activesupport/lib/active_support/testing/declarative.rb