0

我有多態性屬於項目,任務和子任務的討論。當用戶點擊鏈接「完成討論」時,討論模型的布爾屬性從false變爲true。測試失敗,即使它正在測試的東西正在傳遞

我有TDD-ed與下面的規格,所有雖然布爾值確實改變,規範沒有說,預計錯誤是真實的。

這裏是以下規格。它不符合第73行,表示預期錯誤是真實的。所以我的想法是我寫錯了規格。

5 let!(:user) { FactoryGirl.create(:confirmed_user) } 
    6 let!(:project) { FactoryGirl.create(:project) } 
    7 let!(:task) { FactoryGirl.create(:task, :project => project) } 
    8 let!(:subtask) { FactoryGirl.create(:subtask, :task => task) } 
    9 let!(:discussion_for_subtask) { FactoryGirl.create(:discussion, 
10              :user => user, 
11              :discussionable => subtask) } 
15 
16 before do 
17  sign_in_as!(user) 
18  user.projects << project 
19 end 

68  it 'should be able to finish the discussion if they started it/are admin' do 
69  visit subtask_discussions_path(subtask) 
70  click_link "#{discussion_for_subtask.name}" 
71  current_path.should == subtask_discussion_path(subtask, discussion_for_subtask) 
72  click_link 'Finish discussion' 
73  discussion_for_subtask.finished.should == true 
74  current_path.should == subtask_discussions_path(subtask) 
75  end 

這裏是我的工廠(使用FactoryGirl):

1 FactoryGirl.define do  
16 
17 # USER     
18 factory :user do   
19 
20  sequence(:name) do |n| 
21  "Name#{n}"   
22  end 
23  sequence(:email) do |n| 
24  "FactoryEmailNumber#{n}@example.com" 
25  end      
26  password 'secret'  
27  password_confirmation 'secret' 
28 
29  factory :confirmed_user do 
30  after_create do |user| 
31   user.confirm! 
32  end 
33  end 
34 
35 end 
105 # SUBTASK 
106 factory :subtask do 
107  sequence(:name) do |n| 
108  "Subtask - #{n}" 
109  end 
110  task 
111 end 
112 
113 # DISCUSSION 
114 factory :discussion do 
115  sequence(:name) do |n| 
116  "Discussion No#{n}" 
117  end 
118  description "Description for the discussion" 
119 end 

注意,我沒有添加在工廠「完成」的屬性,正如我在遷移默認選擇是錯誤的。

編輯:這是從假更改屬性設置爲true,當用戶點擊鏈接(從討論控制器)的作用:

33 def finish 
34  if current_user.discussions.include?(@discussion) 
35  @discussion.update_attribute(:finished, true) 
36  redirect_to polymorphic_path([@parent, Discussion]) 
37  flash[:notice] = "it worked #{@discussion.finished}" 
38  else 
39  flash[:alert] = 'You must be an admin to do that' 
40  end 
41 end 

你看這個@ discussion.finished在線37?當我使用save_and_open_page手動查看時...

+0

你的規格失效了什麼?有許多應該。 –

回答

1

好吧,我從IRC一個人在答案(衝是這個名字)。 無論如何,規範不通過的全部原因是因爲我沒有重新加載discussion_for_subtask實例。以下是可用的代碼...乾杯!

68  it 'should be able to finish the discussion if they started it/are admin' do 
69  visit subtask_discussions_path(subtask) 
70  click_link "#{discussion_for_subtask.name}" 
71  current_path.should == subtask_discussion_path(subtask, discussion_for_subtask) 
72  click_link 'Finish discussion' 
73  # the following reload is needed so the instance knows about the change you put it through 
74  discussion_for_subtask.reload 
75  discussion_for_subtask.finished.should == true 
76  current_path.should == subtask_discussions_path(subtask) 
77  end 
0

您說:「注意,我沒有'完成'屬性在工廠中添加,因爲我在遷移中選擇默認爲false 「。

所以在你的spec中討論_for_subtask.finished是錯誤的。

該行discussion_for_subtask.finished.should == true失敗

+0

是的,但即使我在討論工廠完成'假',我也會收到相同的規格失敗信息。 – oFca

+0

,但是你的spec會檢查discussion_for_subtask.finished.should是否爲true。這是錯誤的。所以如果完成應該是假的替換行與'discussion_for_subtask.finished.should == false' – alexkv

+0

,但一旦點擊鏈接'完成討論'完成操作觸發(你可以在問題的編輯部分看到的代碼)。該行爲確實會將'已完成'attr更改爲true,但規範仍然失敗...... – oFca