カテゴリー : RSpec

[RSpec] Time.now をスタブ化

Ruby on Rails + RSpec で Time.now をスタブ化するコードをメモ。

time_now = Time.local(2013, 12, 31, 0, 0, 0)
Time.stub!(:now).and_return(time_now)

[RSpec] SeedFu.seed でシードファイルの読み込み先を SeedFu.fixture_paths で指定する

Ruby on Rails + RSpec でテストを走らす前に SeedFu.seed で初期データを流し込んで運用しています。

シードファイルの読み込み先を変更したい場合は SeedFu.fixture_paths に配列で path を渡してあげればOKです。

# spec/spec_helper.rb
 
RSpec.configure do |config|
  # Seed_fu
  config.before(:suite) do
    SeedFu.fixture_paths = [
      "#{Rails.root}/db/fixtures",
      "#{Rails.root}/db/fixtures_initialization"
    ]
    SeedFu.seed
  end
end

[参考]:mbleigh/seed-fu · GitHub

[Ruby on Rails] RSpec でのファイルアップロードの方法

Ruby on Rails + RSpec でのファイルアップロードするためのメソッドをメモ。

fixture_file_upload
Rack::Test::UploadedFile.new
ActionController::TestUploadedFile.new
ActionDispatch::Http::UploadedFile.new

[参考]:ruby – How do I test a file upload in rails? – Stack Overflow はてなブックマーク - ruby - How do I test a file upload in rails? - Stack Overflow

[RSpec] stub_const で定数の stub(スタブ)化

RSpec で、定数を stub(スタブ)化するには stub_const メソッドを使います。

(例)定数 FOO をスタブ化

FOO = 7
 
describe "stubbing FOO" do
  it "can stub FOO with a different value" do
    stub_const("FOO", 5)
    FOO.should eq(5)
  end
 
  it "restores the stubbed constant when the example completes" do
    FOO.should eq(7)
  end
end

(例)Class や Module の定数をスタブ化

module MyGem
  class SomeClass
    FOO = 7
  end
end
 
module MyGem
  describe SomeClass do
    it "stubs the nested constant when it is fully qualified" do
      stub_const("MyGem::SomeClass::FOO", 5)
      SomeClass::FOO.should eq(5)
    end
  end
end

[参考]:Stub Defined Constant – Stubbing constants – RSpec Mocks – RSpec – Relish はてなブックマーク - Stub Defined Constant - Stubbing constants - RSpec Mocks - RSpec - Relish

[RSpec] コントローラーのテストで Ajax リクエストを送る方法

RSpec で、コントローラーのテストで Ajax リクエストを送るには xhr を使えば良いらしいです。

■ Ajax GET

xhr :get, :index

■ Ajax POST

xhr :post, :create, id: 1

下記のような感じで使えます。カンタンですね!

describe "Ajax GET 'index'" do
  it "returns http success" do
    xhr :get, :index
    response.should be_success
  end
end

・[参考]:ruby on rails – How do you test an AJAX request with RSpec/RoR? – Stack Overflow はてなブックマーク - ruby on rails - How do you test an AJAX request with RSpec/RoR? - Stack Overflow