DEV Community

n350071🇯🇵
n350071🇯🇵

Posted on • Edited on

my RSpec note

🏭 Preparing data(let, before)

Factorybot




🧪 Testing

expect

block needed matcher

it{ expect{something.save}.to change{ SomethingRelation.count }.by(3) } it{ expect{something.save!}.to raise_error(StandardError) } 

Model Spec

Controller/Request Spec

Feature Spec

🧪 Advanced Testing

shared example/context



Stub / Dowble

before{ allow_any_instance_of(ClassName).to receive(:a_method).and_return('great!') } before{ allow_any_instance_of(ClassName).to receive(:a_method).and_raise(StandardError.new("error")) } before{ ClassName.any_instance.stub(:a_method).and_return('cool!') } before{ ClassName.any_instance.stub(:a_method).and_raise('error!') } 

😎 Run RSpec

bundle exec rspec bundel exec rspec spec/models/xxxx_spec.rb ## specify specific file bundel exec rspec spec/models/xxxx_spec.rb -e status ## specify a test in specific file 

Troubleshooting

Sometimes, the test DB is not migrated(updated). If it occurs after you run rake db:rollback, then try this.

rake db:rollback RAILS_ENV=test rake db:migrate RAILS_ENV=test 

Top comments (0)