2012-06-24 5 views
0

Ruby에서 다음과 같은 내용이 무엇인지 묻고 싶기 때문에 내 질문이 어리석은 경우 미안합니다. (내 코스 가능한 한 빨리 레일에 대한 책을 읽고 있어요, 그래서 루비 언어에 대한 확고한 이해를 필요가 없습니다.) 여기 "test do"구문의 의미

는 단위 테스트 목적 코드 조각입니다 :

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

죄송합니다. 나는 Ruby에 대한 간단한 튜토리얼을 가지고 있으며 Ruby 환경 (Ruby)에 실제로 변경하면 큰 놀라움을 줄 수 있습니다. (큰 문제는 앞으로 다가올 길을 여러 번 가질 필요가 없다는 것입니다. – hqt

답변

2

이 물건은 간단한 메커니즘에 대한 클래스 매크로, 멋진 이름이라고합니다 :

그것은 클래스 메소드 (DEF self.test), 당신은 예를 들어 직접 클래스 정의에서 사용할 수있는 방법입니다.

(:: 단위 테스트에서) 테스트 케이스를 작성하는 일반적인 방법은 더 같이 될 것이다 : 당신이 그것을 쓸 수 있도록

def test_something_interesting 
    ... 
end 

그러나 ActiveSupport (레일의 일부) 당신이 구문 설탕을 제공합니다 예 :

test "something interesting" do 
    ... 
end 

이 방법은 test_something_interesting이라는 이름의 메소드를 정의합니다.

당신은 레일의 구현을 찾을 수 있습니다

activesupport/lib/active_support/testing/declarative.rb 
+0

어떻게 만들 수 있습니까? 고마워요 :) – hqt

+0

@hqt - Ruby DSL (Domain Specific Language)이라고합니다. 기본적으로 그것은 당신이 몇몇 새로운 구조로 원래의 언어를 확장 할 코드를 작성한다는 것을 의미합니다. 가장 좋은 방법은 [google it] (http://www.google.com/search?q=ruby+dsl)입니다. – Casper

3

블록입니다. 어딘가에 테스트 프레임 워크에서이 방법이 정의됩니다

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

나는는 당신이 좋은 루비 책을 선택하는 것이 좋습니다 당신이 그것을 천천히을 읽어 매우 .

+0

나에게 좀 더 제발. 제발 몇 가지 튜토리얼에 따르면 내가 읽었습니다. 함수가 있어야합니다 :'def test (description)'. 왜이 함수에'& block'을 넣어야합니까? (기억한다면, 그것은 블록이 선택이라는 것을 의미합니다.)? – hqt

+0

예 블록은'do end' 문법이며,'{}'이 될 수도 있습니다. 블록에 대한 자세한 내용은 http://rubylearning.com/satishtalim/ruby_blocks.html –