2015-04-12 96 views
0

我正在使用Michael Hartl rails教程。在運行測試中,我得到以下錯誤:Rails「未知命令」參數錯誤

Error: 
UserTest#test_associated_microposts_should_be_destroyed: 
ArgumentError: unknown command 'a' 
test/models/user_test.rb:73:in 'test' 
test/models/user_test.rb:73: in 'block in <class:UserTest>' 

「測試/模型/ user_test.rb」如下:

test "associated microposts should be destroyed" do 
@user.save 
@user.microposts.create!(content: "Lorem ipsum") 
assert_difference 'Micropost.count', -1 do 
@user.destroy 
end 

測試很簡單,只針對測試下面的行在我的模型(user.rb)

has_many :microposts, dependent: :destroy 

如果我評論了這句話如下:

has_many :microposts#, dependent: :destroy 

我,一如預期,得到

Failure: [...] "Micropost.count" didn't change by -1. Expected:38 Actual 39. 

如果我取消了「依賴:破壞」的聲明,我得到這個「未知的命令」的錯誤。任何人都可以提供一些關於如何最有可能生成此錯誤的指導,關於rails(不包括rails控制檯)的上下文中的「命令」是什麼以及要在哪裏首先嚐試解決它(Models?Controllers?)。謝謝。

+0

從來沒有進入測試,但不應該在測試名稱中有下劃線?爲了讓它「associated_microposts_should_be_destroyed」'? –

+0

模型,數據庫和測試本身將是我會先看的地方,因爲那就是你正在測試的東西。確保用戶和微博之間有關聯,並且你運行了rake db:migrate – forthowin

+0

你可以發佈整個測試文件嗎? (儘可能多地刪除它,同時仍然保留錯誤) –

回答

2

您的assert_difference調用中存在拼寫錯誤。

assert_difference 'Micropost.count" ... 

注意開始的單引號和結尾的雙引號。

+0

感謝您的收穫。這只是寫錯時的錯字。該錯誤與此疏忽無關。 – Bastien

0

我重新計算了我的代碼,發現刪除了每個測試,即使只有一個測試報告在失敗日誌中,我可以通過刪除兩個不同的測試我的測試文件底部如下:

test "associated microposts should be destroyed" do 
@user.save 
@user.microposts.create!(content: "Lorem ipsum") 
assert_difference 'Micropost.count', -1 do 
    @user.destroy 
end 

test "authenticated? should return false for a user with nil digest" do 
    assert_not @user.authenticated?(:remember, '') 
    end 
end 
. 
. 

問題是,其中一個「結束」是錯位的。該文件應該是:

test "associated microposts should be destroyed" do 
@user.save 
@user.microposts.create!(content: "Lorem ipsum") 
assert_difference 'Micropost.count', -1 do 
    @user.destroy 
end 
end 
test "authenticated? should return false for a user with nil digest" do 
    assert_not @user.authenticated?(:remember, '') 
end 

我仍然有興趣瞭解爲什麼檢索到的「未知的命令‘A’」故障日誌,以提高我的軌測試環境的道路的認識。

0

我剛纔也有同樣的問題,

截至micropost_test.rb頂部有此設置

//first post creation for @user 
def setup 
    @user = users(:michael) 
    # This code is not idiomatically correct. 
    @micropost = @user.microposts.build(content: "Lorem ipsum") 
end 

//second post creation in test for @user 
test "associated microposts should be destroyed" do 
    @user.save 
    @user.microposts.create!(content: "Lorem ipsum") 
    assert_difference 'Micropost.count', -1 do 
    @user.destroy 
end 

目前已經發布的訊息,所以當用戶保存在測試另一篇文章,則該用戶實際上是與他刪除了2個職位都不見了。所以我們期望的應該是-2的差異。