# install
```
group :development, :test do
gem 'rspec-rails'
gem 'factory_girl_rails'
end
```
```
$ bundle install
$ bundle exec rails g rspec:install
```
# テスト実行コマンド
```
$ bundle exec rspec spec/models/user_spec.rb
```
# モデル
Userモデルに関するテストを書くファイル作成
```
$ bundle exec rails g rspec:model user
```
```ruby
describe User do # 対象モデル
describe "#name" do # 対象メソッド
let(:user){ User.new(name: "")
it "validでないこと" # 期待する内容
user.valid?
expect(user.errors[:name]).to be_present
end
end
end
```
# コントローラー
```ruby
describe "GET #new" do
context "ログインユーザーがアクセスしてきた時" do
before do
get :new
end
it "ステータスコード200を返す" do
expect(response.status).to eq(200)
end
end
end
```
# stub
外部に依存するメソッドを擬似的に返り値を設定する。
例えば、外部APIを叩くメソッドなどは正しい値が帰ってくることを期待するが、毎回叩きたくない。
```
class User
def hoge
# 外部のAPI等を叩く処理
end
end
let(:user){ User.new }
allow(user).to receive(:hoge){
"result"
}
puts user.hoge #=> result
```