Rails API Testing Best Practices によれば Request Spec で HTTP Status および Response Body を、とあります。これで試しに作成してみることに。
スデに実装は書いてしまっているので
rails g rspec:response
とかになるのかな。とりあえず導入から。
Gemfile に以下を追加、なのか。
group :development, :test do
gem 'rspec-rails', '~> 3.0.0.beta'
end
で、
$ bundle install
$ rails g rspec:install
とのこと。
で、試験追加を、と思って Generators 見てみるに以下とのこと。
- scaffold
- model
- controller
- helper
- view
- mailer
- observer
- integration
むむ、と言いつつ Rails API Testing Best Practices を見てみるに API Testing is integration Testing という記述あり。成程。
以下かな。
$ rails g rspec:integration Hoge
かくにんしてみます。
$ rails g rspec:integration hoge
create spec/requests/hoges_spec.rb
あと、Redis な mock が必要ですね。FactoryGirl とかも必要なのかな。
mock_redis かくにん
Gemfile に以下を追加して
group :development, :test do
gem 'rspec-rails', '~> 3.0.0.beta'
gem "mock_redis", "~> 0.10.0"
end
bundle install して rails c で確認。しようとしたのですが Redis.stub は console からは無理らしい。
とりあえず
POST な試験を書いてみます。その前に spec/spec_helper.rb に以下を追加。
require 'mock_redis'
RSpec.configure do |config|
config.before(:each) do
redis_instance = MockRedis.new
Redis.stub(:new).and_return{ redis_instance }
Redis.current = Redis.new
end
end
で、簡単な試験をでっちあげてみたのですが Redis.stub が云々と言われたので
# Redis.stub(:new).and_return{ redis_instance }
allow(Redis).to receive(:new).and_return(redis_instance)
みたいにしてます。エラーメッセージ (?) が以下なカンジでした。
Using
stub
from rspec-mocks’ old:should
syntax without explicitly enabling the syntax is deprecated. Use the new:expect
syntax or explicitly enable:should
instead.
あと、Redis な mock がちゃんと動いてるのか確認してみます。まずローカルな Redis.current を掃除しておいて
> Redis.current.flushall
試験実行。
$ bundle exec rspec spec
で、rails c から以下。
> Redis.current.keys
=> []
大丈夫みたいです。
試験を一通り書いたら
リファクタ実施の方向にて。