2
\$\begingroup\$

I know how to write simple RSpec tests and unit tests. I just want to know if this is good enough or if there are any improvements I can make.

I intend to test the the toggle_property method of the TaskItemUserReference model which updates the property, completed from false to true or vice versa.

Relationships

User has many Tasks through TaskUserReference Task has many Users through TaskUserReference

TaskItem has many Users through TaskItemUserReference User has many TaskItem through TaskItemUserReference

#Factories
FactoryGirl.define do
 factory :task do
 name Faker::Lorem.sentence(2)
 end
end
FactoryGirl.define do
 factory :task_user_reference do
 user
 task
 end
end
FactoryGirl.define do
 factory :task_item do
 name Faker::Lorem.sentence(3)
 task
 end
end
FactoryGirl.define do
 factory :task_item_user_reference do
 task_item
 user
 active true
 completed false
 end
end
# RSPEC test
require "rails_helper"
RSpec.describe Task, type: :model do
 let(:owner) { create(:user) }
 let(:task) { create(:task, owner: owner) }
 let(:user) { create(:user) }
 let(:task_item) { create(:task_item, task: task) }
 before do
 user.tasks << task
 user.task_item_user_references.create(
 user_id: user.id,
 completed: true,
 task_item: task_item
 )
 end
 describe "task_items" do
 it "updates status" do
 task_item_user_reference = user.task_item_user_references.first
 task_item_user_reference.toggle_property(:completed)
 expect(task_item_user_reference.completed).to eq(false)
 end
 end
end
asked Aug 10, 2017 at 2:42
\$\endgroup\$
0

1 Answer 1

1
\$\begingroup\$

It looks like you don't need the whole user-task-task item setup for the test you provided. It's actually a TaskItemUserReference spec, not Task spec.

RSpec.describe TaskItemUserReference, type: :model do
 describe "#toggle_property" do
 it "updates property" do
 task_item_user_reference = TaskItemUserReference.new(completed: true)
 expect do 
 task_item_user_reference.toggle_property(:completed)
 end.to change {task_item_user_reference.completed}.from(true).to(false)
 end
 end
end
answered Aug 26, 2017 at 7:16
\$\endgroup\$
1
  • \$\begingroup\$ TaskItemUserReference seems to make sense. \$\endgroup\$ Commented Aug 27, 2017 at 14:00

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.