0

如果我的问题很愚蠢,我很抱歉,因为我只想问一下 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

我想问的是:在我不知道的那一行,syntax test "...." do是什么意思?它是函数、方法、类还是其他东西?

4

2 回答 2

2

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

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

强烈建议您选择一本好的 Ruby 书籍并慢慢阅读。

于 2012-06-24T16:44:25.107 回答
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
于 2012-06-24T17:04:21.110 回答