2014-05-23 48 views
1

我正在使用「使用Rails 4進行敏捷Web開發」一書,我是一個完整的初學者,並沒有理解一些問題。耙子中止了!語法錯誤:

我只是嘗試了rake test:models命令

我還給:

rake aborted! 
SyntaxError: /Users/********/Desktop/depot/test/models/product_test.rb:11: syntax error, unexpected end-of-input, expecting keyword_end 

是什麼恰恰意味着?我一直按照這本書,並遇到了這個問題。

在此先感謝您的有益答案和想法!

這裏的product_test.rb代碼

require 'test_helper' 

class ProductTest < ActiveSupport::TestCase 
    test "product attributes must not be empty" do 
    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 
+0

發佈您的'product_test.rb'型號代碼。 – Pavan

+0

您在'product_test.rb'中缺少'end'語句。 –

+0

添加上面的傢伙!謝謝! – RubyMax

回答

1

你有2個街區,但只有一個結束語句;需要有另一個end底:

require 'test_helper' 

class ProductTest < ActiveSupport::TestCase # <== this is the start of the class 
    test "product attributes must not be empty" do # <== this is the start of a block 
    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 # <== this is missing 
end # <== this is the end of the class 

class是一個塊的開始和dotest線的末端是另一個。

這種類型的錯誤始終會針對文件的最後一行進行報告,因爲它無法確定是否存在缺失的end,直到它到達文件結尾並且找不到它。

+0

因此,第一個結束,Class /測試塊結束,最後一個結束是整個代碼的結束?抱歉只想有一個絕對的理解。謝謝格雷姆! – RubyMax

+0

@RubyMax'do block'應該有一個'end',你錯過了! – Pavan

+0

@RubyMax,是的,你需要一個'end'作爲'class'和測試塊。您在測試塊末尾丟失了一個。 –

0

您錯過了enddo block.Adding它應該修復錯誤。

require 'test_helper' 

class ProductTest < ActiveSupport::TestCase 
    test "product attributes must not be empty" do 
    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 #do end 
end #class end