メモ

spec/view 配下を見てて assert_select なるモノがあることを初めて知ってたりして。知らんうちにプレゼンテーションな部分まで確認できるようになっとるんですね。
view のあたりは別途手を入れることになるだろう、と思いつつその時にハマるんだろうな、と思いつつ。

とりあえづ

devise なナニを盛り込んで spec を作って実機 deploy してみる方向。
今は bundle install してるだけな状態なので、もう少し諸々を弄る必要があるんですが、とりあえずこれまでのナニな commit を作っておく必要があるな。devise はこの commit にカブセる形を取るか。
db/migrate/ の中身を削除して他は全部盛り込むか。で、commit 作ってヤること的には

  • rails generate devise:install
  • config/environments/development.rb 修正
    • これ production で動かすときにはドメインを云々、ってありますね、どうしよう
  • app/views/layouts/application.html.erb 修正
  • public/index.html 削除
  • config/routes.rb 修正
  • rails generate controller welcome index
  • rails generate devise:views
  • rails generate devise user
  • マイグレーション実行
  • ルーティングの修正
  • トップページの修正
  • コントローラの修正

以降続くんですが、spec とかどこ行った、というカンジですな。Devise::TestHelpers というものがある、ってのは存知あげておるのですがどうしたものやら。
現時点では

  • 未ログイン時の routing
  • ログイン時の routing

が確認できれば良い、ってことにします。とは言え、ログイン後に一覧を取得時、今は無条件にしてますが、ログインアカウントの情報がリクエストに入ってないと駄目、ってことになるんだけどこのあたりは spec の範疇外?
# 範疇外、な気がしてきてます

盛り込んだ

bundle exec rspec したら failure 沢山出た。基本的に試験側でも devise てきにログインしとかなきゃ、なソレをスルーしている箇所が沢山あるはず。

factory_girl

なんか rails c で Factory.define したら Duplicate 云々ってエラーになるな、って思ってたら spec/factories.rb を自動で読みこんでやがる。これ系って昔 MFC だとかなナニで知ってること前提な知識が膨大な世界だな。なんとなく脳が弱いワタシには非常に辛い。

あるいは

spec/requests な試験しててテーブル無いとか言われて test.sqlite3 にテーブルができてないのをようやく発見したりとか我慢の限界。
個別に動かす場合にゃ

$ rake db:test:prepare

すりゃ良いのか。そんなの知らんわ、というナニはスルー。
で、云々してて以下なカンジで試験が通った。意味不明。ハラ立つので全部引用。

require 'spec_helper'

describe "CloudStackApis" do
  def mock_cloud_stack_api(stubs={})
    @mock_cloud_stack_api ||= mock_model(CloudStackApi, stubs).as_null_object
  end

  def login(user)
#    post_via_redirect user_session_path, 'user[email]' => user.email, 'user[password]' => user.password
    post user_session_path, 'user[email]' => user.email, 'user[password]' => user.password
  end

  describe "GET /cloud_stack_apis (login)" do
    it "works! (now write some real specs)" do
      # Run the generator again with the --webrat flag if you want to use webrat methods/matchers
      user = Factory.create(:user)
      login(user)

      CloudStackApi.stub(:find).with(:one, :from => '/client/api', :params => {:command => 'listVirtualMachines'}) { [mock_cloud_stack_api] }

      get cloud_stack_apis_path
      response.status.should be(200)
    end
  end

  describe "GET /cloud_stack_apis (not login)" do
    it "works! (now write some real specs)" do
      # Run the generator again with the --webrat flag if you want to use webrat methods/matchers
      CloudStackApi.stub(:find).with(:one, :from => '/client/api', :params => {:command => 'listVirtualMachines'}) { [mock_cloud_stack_api] }

      get cloud_stack_apis_path
      response.status.should be(302)
    end
  end
end

ヒッカカッてたのは上側のログインしないといけないナニ。とりあえずパスしたので良し、ってことにして次。なんでしょ、まるで切れないカマで広大な土地の草刈りをしてるようです。
その後、controller なテスツ (というか spec) も以下を before に追加して

    @user = Factory.create(:user)
    sign_in @user

無事にパスしてます。後は pending なナニをなんとかせねば。

そういえば

別件で gitsis-web-admin を云々しとるのですが、そこの .gitignore が以下。

.DS_Store
.idea
doc
log/*
tmp/*
config/application.yml
config/database.yml
db/*.sqlite3
db/schema.rb

成程。これは別途真似をしておく方向で。