プロジェクト、タスク、およびサブタスクにポリモーフィックに属するディスカッションがあります。ユーザーが「ディスカッションを終了する」リンクをクリックすると、ディスカッション モデルのブール属性が false から true に変わります。
私はこれを以下の仕様で TDD しました。ブール値は実際に変更されますが、仕様は失敗し、false が true であると予想されます。
これが以下の仕様です。73 行目で失敗し、false が true であると予想されます。だから私の考えは、仕様を間違って書いたということです。
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
デフォルトがfalseであることを移行で選択したため、ファクトリに「終了」属性が追加されていないことに注意してください。
編集: これは、ユーザーが (ディスカッション コントローラーから) リンクをクリックしたときに、属性を false から 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 を使用して手動で表示すると、true が返されます...