ラベル RSpec の投稿を表示しています。 すべての投稿を表示
ラベル RSpec の投稿を表示しています。 すべての投稿を表示

2014年6月10日火曜日

プロキシ環境でSeleniumを使うヘ(^o^)ノ

こんなことがありまして。。。


今日も解決せずに、Seleniumを使うことにしました(>_<)

プロキシ環境下なんで、Firefoxは起動するけど、その先に進まない!

Capybara + Selenium + プロキシ環境下で使えるようにしたよ。

設定は簡単で、プロキシサーバーに接続しないようにしただけやけど

spec/spec_helper.rb
 ENV['NO_PROXY'] = ENV['no_proxy'] = '127.0.0.1'
 Capybara.app_host          = 'http://127.0.0.1:3000'
 Capybara.server_port       = 3000
 Capybara.default_driver    = :selenium
 Capybara.default_selector  = :css
 Capybara.default_wait_time = 10

プロキシは越えるためにあるのだー(こえてない

( ̄(エ) ̄)彡☆

2014年2月23日日曜日

Shinosaka.rb #2を開催したよーヘ(^o^)ノ

Shinosaka.rb #2を開催したヘ(^o^)ノ


参加費1,500円(゚д゚)!にも関わらず?意識高い皆さんが参加していただきましたー

次回は参加費見直しますw ごめんねー

内容はTDDハンズオン!

スライド

デモでプロ生ちゃんTDDを実践 ⇒ [GitHub]pronama_tdd

RSpecでみなさんと一緒にTDDを実践しました。

ライブコーディングはとっても緊張…(;・∀・)

でも、とても勉強になった。

こういう風に書いた方が良いとか、スペルミスのご指摘などなど

コードレビューの大切さを実感したよ

金井さんのLT
= 準備中 =

@kytiken_codeさんのテストコードをレビュー

Pryこみったーのyui-knkさんのお話。

普段ちょー便利に利用させていただいているPryの便利な使い方を教えていただきましたー

みなさんのこんな便利gemあるよー情報良かった!

知らないものばかり…まだまだですわw

rbenv-gemsetのお話

railsActiveRecordの便利な機能のお話

Autodocテスト結果をドキュメント化してくれるgem

その中でも…

コレ! git-svn

現場はsvn…

でもgitが使いたい!!!って人はこれ

ヤバいw

知らんかったーΣ(゚д゚lll)

Windowsでも使えるようですね ⇒ http://shinodogg.com/?p=4964

即採用決定ーヘ(^o^)ノ

やっぱり勉強会はいいよー

立ち上げてほんとによかった

次回は3月22日(土)予定です。「初めてのgem(仮)」

是非、参加してくださいねー

参加していただいたみなさん。お疲れ様でしたー( ̄(エ) ̄)彡☆

2013年8月23日金曜日

FactoryGirl Sequences ignore …

FactoryGirlしりーず

Sequences

これはよく使う
factory :post do 
  author
  sequence(:title) {|n| "test#{n}"} ←これ
end

test1,test2,test3と連番でvalueをセットできるよ

ignore

これは僕は知らなかった
factories/users.rb
FactoryGirl.define do
  factory :user, aliases: [:author] do
    name 'murajun1978'
    password 'murajun1978'
    password_confirmation { |u| u.password }

    factory :user_posts do
      ignore do ←これ
        count 1
      end

      after(:create) do |user, value|
        FactoryGirl.create_list(:post, value.count, author: user)
      end
    end
  end

  factory :post do 
    author
    sequence(:title) {|n| "text#{n}"}
  end
end

models/user.rb
require 'spec_helper'

describe User do
  context "example1" do 
    subject {FactoryGirl.create(:user)}
    its(:name){should eq 'murajun1978'}
  end

  context "example2" do 
    subject {FactoryGirl.create(:post)}
    its("author.name"){should eq "murajun1978"}
  end

  context "example3" do ←これ
    before {FactoryGirl.create(:user_posts, count: 5)}
    it {Post.should have(5).posts}
    it {User.should have(1).user}
  end
end

countを引数で指定するとそのレコード数だけ作成してくれる

countを指定しなければデフォルト値がセットされるよ

上の例だと1回だね

ちなみに…

have(5).postsのpostsは任意なのでitemsとかなんでもおkヘ(^o^)ノ

FactoryGirl Aliases

FactoryGirlとRSpecをすこしずつまとめようとおもう

まずはFactoryGirlのAliasesから

こんなテーブルがあるとする
User
 name
 password_digest

Post
 title
 author_id

model/user.rb
class User < ActiveRecord::Base
  has_secure_password

  has_many :posts
end

model/post.rb
class Post < ActiveRecord::Base
  belongs_to :author, class_name: 'User'
end

factories/users.rb ←ここ
FactoryGirl.define do
  factory :user, aliases: [:author] do
    name 'murajun1978'
    password 'murajun1978'
    password_confirmation { |u| u.password }
  end

  factory :post do 
    author
    title 'test'
  end
end

spec/models/user_spec.rb
require 'spec_helper'

describe User do
  context "example1" do 
    subject {FactoryGirl.create(:user)}
    its(:name){should eq 'murajun1978'}
  end

  context "example2" do 
    subject {FactoryGirl.create(:post)}
    its("author.name"){should eq "murajun1978"}
  end
end

specの書き方はさておき(;・∀・)

こんな書き方ができまするヘ(^o^)ノ

2013年7月9日火曜日

Rails4でRSpec(4) ヘ(^o^)ノ

前回のテストケースをDRY

spec/models/user_spec.rb
require 'spec_helper'

describe User do
  describe '#validate' do
    before :all do
      @user = FactoryGirl.build(:user)
    end

    it "正常に保存できる" do
      expect(@user.save).to be true
    end

    context 'login_name' do
      it '数字のみ' do
        @user.login_name = '11111'
      end

      it '英字のみ' do
        @user.login_name = 'ssss'
      end

      it '最初の文字は英字' do
        @user.login_name = '111aaa'
      end

      it '必須' do
        @user.login_name = ''
      end

      after :each do
        expect(@user.save).to be false
      end
    end

    after :all do
      User.delete_all
    end
  end
end

( ̄(エ) ̄)彡☆

Rails4でRSpec(3) ヘ(^o^)ノ

前回のはテストになってないwww

specファイルを修正

spec/models/user_spec.rb
require 'spec_helper'

describe User do
  describe '#validate' do 
    before :all do 
      @user = FactoryGirl.build(:user, password: 'murajun1978')
    end

    it "正常に保存できる" do
      expect(@user.save).to be true
    end

    context 'login_name' do
      it "login_nameは数字のみは不可" do
        @user.login_name = "111"
        expect(@user.save).to be false
      end

      it "login_nameは英字のみは不可" do
        @user.login_name = "eee"
        expect(@user.save).to be false
      end

      it "login_nameの先頭は必ず英字" do
        @user.login_name = "111aaa"
        expect(@user.save).to be false
      end

      it "login_nameは必須" do
        @user.login_name = ""
        expect(@user.save).to be false
      end

      it "login_nameは重複不可" do
        @user = FactoryGirl.build(:user, login_name: 'user_name_1')
        expect(@user.save).to be false
      end
    end

    after :all do
      User.delete_all
    end
  end
end

正常に保存できる条件でテストしないと意味ない(;・∀・)

( ̄(エ) ̄)彡☆

2013年7月8日月曜日

Rails4でRSpec(2) ヘ(^o^)ノ

昨日のBlogで少しきになるところがあったのでリファクタリング

spec/factories/users.rb
FactoryGirl.define do
  factory :user, :password, class: User do |f|
    sequence(f.login_name) { |n| "user_name_#{n}" } 
    f.password_confirmation { |u| u.password }
    f.admin true
  end
end

spec/models/user_spec.rb
require 'spec_helper'

describe User do
  describe '#validate' do 

    it "正常に保存できる" do
      @user = FactoryGirl.build(:user, password: 'murajun1978')
      expect(@user.save).to be true
    end

    context 'login_name' do
      before :all do
        @user = FactoryGirl.build(:user)
      end

      it "login_nameは数字のみは不可" do
        @user.login_name = "111"
        expect(@user.save).to be false
      end

      it "login_nameは英字のみは不可" do
        @user.login_name = "eee"
        expect(@user.save).to be false
      end

      it "login_nameの先頭は必ず英字" do
        @user.login_name = "111aaa"
        expect(@user.save).to be false
      end

      it "login_nameは必須" do
        @user.login_name = ""
        expect(@user.save).to be false
      end

      it "login_nameは重複不可" do
        @user = FactoryGirl.build(:user, login_name: 'user_name_1')
        expect(@user.save).to be false
      end
    end

    after :all do
      User.delete_all
    end
  end
end

Factory_Girlを少しシンプルにしてみましたヘ(^o^)ノ

login_nameは連番(user_name_1..user_name_2.. みたいな)

いい感じになったかな?

( ̄(エ) ̄)彡☆

2013年7月7日日曜日

Rails4でRSpec ヘ(^o^)ノ

Rails3からRails4へアップグレードしてみましたヘ(^o^)ノ

TurnipとCucumberについても近々書こう

Gemfile
source 'https://rubygems.org'

gem 'rails', '4.0.0'

group :development do 
  gem 'sqlite3'
  gem 'better_errors'
  gem 'binding_of_caller'
end

group :test do
  gem 'rspec-rails'
  gem 'spring'
  gem 'turnip'

  gem 'guard-rspec'
  gem 'guard-spring'

  gem 'growl'
  gem 'rb-fsevent'

  gem 'factory_girl_rails'
  gem 'database_cleaner'
end 

group :production do
  gem 'thin'
  gem 'pg'
end

gem 'sass-rails', '~> 4.0.0'

gem 'uglifier', '>= 1.3.0'

gem 'coffee-rails', '~> 4.0.0'

gem 'jquery-rails'

gem 'turbolinks'

gem 'jbuilder', '~> 1.2'

group :doc do
  gem 'sdoc', require: false
end

gem 'bcrypt-ruby', '~> 3.0.0'

Guardfile
guard :rspec, spring: true, turnip: true do
  watch(%r{^spec/.+_spec\.rb$})
  watch(%r{^lib/(.+)\.rb$})     { |m| "spec/lib/#{m[1]}_spec.rb" }
  watch('spec/spec_helper.rb')  { "spec" }

  # Rails example
  watch(%r{^app/(.+)\.rb$})                           { |m| "spec/#{m[1]}_spec.rb" }
  watch(%r{^app/(.*)(\.erb|\.haml)$})                 { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
  watch(%r{^app/controllers/(.+)_(controller)\.rb$})  { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
  watch(%r{^spec/support/(.+)\.rb$})                  { "spec" }
  watch('config/routes.rb')                           { "spec/routing" }
  watch('app/controllers/application_controller.rb')  { "spec/controllers" }

#  # Capybara features specs
#  watch(%r{^app/views/(.+)/.*\.(erb|haml)$})          { |m| "spec/features/#{m[1]}_spec.rb" }

  # Turnip features and steps
  watch(%r{^spec/acceptance/(.+)\.feature$})
  watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$})   { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
end

app/models/user.rb
class User < ActiveRecord::Base
  has_secure_password

  validates :login_name, uniqueness: true
  validates_presence_of :login_name, :admin
  validates_format_of :login_name, with: /\A[a-z][a-z0-9]*[0-9]\Z/
end

spec/models/user_spec.rb
require 'spec_helper'

describe User do
  describe '#validate' do 
    before :all do
      @user = FactoryGirl.create(:user)
    end
    
    it "正常に保存できる" do
      expect(@user.save).to be true
    end

    context 'login_name' do
      it "login_nameは数字のみは不可" do
        @user.login_name = "111"
        expect(@user.save).to be false
      end

      it "login_nameは英字のみは不可" do
        @user.login_name = "eee"
        expect(@user.save).to be false
      end

      it "login_nameの先頭は必ず英字" do
        @user.login_name = "111aaa"
        expect(@user.save).to be false
      end

      it "login_nameは必須" do
        @user.login_name = ""
        expect(@user.save).to be false
      end

      it "login_nameは重複不可" do
        @user2 = FactoryGirl.build(:user2)
        expect(@user2.save).to be false
      end
    end

    after :all do
      User.delete_all
    end
  end
end

spec/factories/users.rb
FactoryGirl.define do
  factory :user, class: User do |f|
    f.login_name 'murajun1978'
    f.password 'murajun1978'
    f.password_confirmation { |u| u.password }
    f.admin true
  end

  factory :user2, class: User do |f|
    f.login_name 'murajun1978'
    f.password 'sss'
    f.password_confirmation { |u| u.password }
    f.admin true
  end
end

.rspec
--color
--format d

実行結果
User
  #validate
    正常に保存できる
    login_name
      login_nameは数字のみは不可
      login_nameの先頭は必ず英字
      login_nameは重複不可
      login_nameは英字のみは不可
      login_nameは必須

Finished in 0.10709 seconds
6 examples, 0 failures

validateの正規表現で^や$が使えなくなってたねー

( ̄(エ) ̄)彡☆