該方法本身按預期工作,但是當我嘗試在模型規範中測試它時,創建部件失敗。查找部分運作良好。我錯過了什麼?rspec模型測試;方法不起作用
conversation.rb
scope :between, -> (sender_id, recipient_id) do
where("(conversations.sender_id = ? AND conversations.recipient_id = ?) OR (conversations.sender_id = ? AND conversations.recipient_id = ?)", sender_id, recipient_id, recipient_id, sender_id)
end
def self.create_or_find_conversation(task_assigner_id, task_executor_id)
Conversation.between(task_assigner_id, task_executor_id).first_or_create do |conversation|
conversation.sender_id = task_assigner_id
conversation.recipient_id = task_executor_id
end
end
conversation_spec.rb
describe "class methods" do
let(:sender) { create(:user) }
let(:recipient) { create(:user) }
let(:other_recipient) { create(:user) }
let!(:conversation) { create(:conversation, sender: sender, recipient: recipient) }
context "create_of_find_conversation" do
#this one throws Failure/Error: expect{conv}.to change{Conversation.count}.by(1)
#expected result to have changed by 1, but was changed by 0
it "creates conversation" do
conv = Conversation.create_or_find_conversation(sender, other_recipient)
expect{conv}.to change{Conversation.count}.by(1)
end
#this one is working as expected
it "finds conversation" do
conv = Conversation.create_or_find_conversation(sender, recipient)
expect(conv).to eq(conversation)
end
end
end
我也嘗試過這種方式,但並沒有幫助。任何其他想法? –
啊,我是個白癡。方法params必須是user_id而不是用戶。 –
你也是對的,它不能與'conv'變量一起工作。 –