localでパスするrspecがリモートだとerrorになる

ローカルでいつも通りrspecを実行してテストがパスすることを確認していました。

```
Comment
  is invalid without comment

PostProduct
  is valid with a title, image, and product_url
  is invalid without title
  is invalid without image
  is invalid without product_url
  registration of the same item is invalid
  valid if post_id is different

Post
  is invalid withosut post image
  is invalid without post title

User
  is valid with a nickname, email, and password
  is invalid without user nickname
  is invalid without user email
  is invalid with a duplicate email address
  is invalid without user password
  is invalid within 300 characters
  is valid within 300 characters

Finished in 0.36878 seconds (files took 1.3 seconds to load)
16 examples, 0 failures
```

無事パス！

リモートにプッシュした時にgithub actionで自動的にrspecが実行されるのですが、

![スクリーンショット 2021-10-14 19.49.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1541345/3b107a0a-4578-dab4-efa6-e01496f8fad2.png)

エラーに、、、、、

原因を見てみると

```
  1) PostProduct registration of the same item is invalid
     Failure/Error: FactoryBot.create(:post_product, user: user, post: post)

     ArgumentError:
       SMTP From address may not be blank: nil
     # ./spec/models/post_product_spec.rb:37:in `block (2 levels) in <main>'
```

SMTPのアドレスがないみたいなのでtest.rbにdevelopment.rbと同じhost addresを追加してみます。

```
  config.action_mailer.smtp_settings = {
      port:                 587,
      address:              'smtp.gmail.com',
      domain:               'smtp.gmail.com',
      user_name:            ENV["GMAIL_ADDRESS"],
      password:             ENV["GMAIL_2FACTOR_PASSWORD"],
      authentication:       'plain',
      enable_starttls_auto: true
    }
```

結果は。。。。。。。


```
  1) PostProduct registration of the same item is invalid
     Failure/Error: FactoryBot.create(:post_product, user: user, post: post)

     ArgumentError:
       SMTP From address may not be blank: nil
     # ./spec/models/post_product_spec.rb:37:in `block (2 levels) in <main>'
```

はい。またエラーですね！しかも同じ　ʅ（◞‿◟）ʃ

これに関しては、envを使っていることが原因ですね。

envファイルはapiのパスワードやメールアドレスなど第三者に公開したくない情報を入れているのでgitの管理下に入れていないです。

なので改めてworkflowの中で設定してあげる必要があります。

```
name: Test Rspec

on:
  pull_request:
    branches: [ master ]

jobs:
  run_spec:
    name: Run Test
    runs-on: ubuntu-latest
    
    steps:
    - uses: actions/checkout@v2
    - name: Set up Ruby 2.6.5
      uses: ruby/setup-ruby@v1
      with:
        ruby-version: 2.6.5
    - name: Test with Rspec
      run: |
        gem install bundler
        bundle config set --local path vendor/bundle  --jobs 4 --retry 3
        bundle install --jobs 4 --retry 3
        bundle exec rspec

「今まではここまでしか書いていなかったので、このrunの下にenvを作ります。」
      env:
        GMAIL_ADDRESS: ${{ secrets.GMAIL_ADDRESS }}
        GMAIL_2FACTOR_PASSWORD: ${{ secrets.GMAIL_2FACTOR_PASSWORD }}
```

ここで使っているsecretsですが、これはgithubのリポジトリメニューから追加することができるのでやってみてください。

これでenvを指定することができました！
実際にリモートにプッシュしてみます。

![スクリーンショット 2021-10-15 14.12.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1541345/f44f1b34-ba2b-de3d-8873-ce8f01e4ff58.png)

見事パスしました！！！！！

<h1>まとめ</h1>
envはgitignoreについかしていたらローカルだけでした使用できないので、ローカルでenvを使った場合はgithubやデプロイ先でも指定するようにしましょう。
他に方法があれば教えてください。