2013-08-23 46 views
3

所以我在做一個web應用程序在這裏使用Rails 4,如果它幫助我用山獅,開發使用的Aptana Studio的3FactoryGirl序列打破了我的RSpec的測試(我認爲)

是在Mac上我正在嘗試創建一個頁面來列出並分頁我的應用程序的用戶。我使用will_paginate和bootstrap-will_paginate來做到這一點。當我在我的數據庫上使用示例用戶運行rails server時,它完美地工作,但是當我使用RSpec和FactoryGirl運行我的測試時,所有需要用戶授權的頁面的測試都不起作用。所以這就是爲什麼我認爲問題是FactoryGirl。

以前,我factories.rb這個樣子,因爲它只需要創建一個用戶:

FactoryGirl.define do 
    factory :user do 
    username "example_user" 
    password "foobar" 
    password_confirmation "foobar" 
    end 
end 

現在我改成了這樣:

FactoryGirl.define do 
    factory :user do 
    sequence(:username) { |n| "Person_#{n}" } 
    password "foobar" 
    password_confirmation "foobar" 
    end 
end 

而且這裏的變化到我的user_pages_spec文件。在測試停止傳遞之前,這是我在工廠文件之外改變的唯一東西。這是它的差異:

describe "index" do 
- before do 
-  sign_in FactoryGirl.create(:user) 
-  FactoryGirl.create(:user, username: "bananarama") 
-  FactoryGirl.create(:user, username: "appleface") 
+ let(:user) { FactoryGirl.create(:user) } 
+ before(:each) do 
+  sign_in user 
     visit users_path 
    end 

    it { should have_title('All users') } 
    it { should have_content('All users') } 

- it "should list each user" do 
-  User.all.each do |user| 
-  expect(page).to have_selector('li', text: user.username) 
+ describe "pagination" do 
+ 
+  before(:all) { 30.times { FactoryGirl.create(:user) } } 
+  after(:all) { User.delete_all } 
+ 
+  it { should have_selector('div.pagination') } 
+ 
+  it "should list each user" do 
+  User.paginate(page: 1).each do |user| 
+   expect(page).to have_selector('li', text: user.username) 
+  end 
     end 
    end 
    end 

有什麼缺失?還有什麼我應該看的?再次,失敗的測試是關於授權的頁面上的測試。其中包括一些在我的授權頁面.pb

非常感謝!

回答

5

修復它我自己!

我想工廠女孩在被要求在不同的測試中使用相同的FactoryGirl序列時一定會感到困惑。

我剛剛使用了我的舊工廠,但添加了一個名爲username的單獨序列。每次我需要多個用戶時,我都會使用該順序覆蓋默認用戶名。基本上是:

FactoryGirl.define do 
    sequence(:username) { |n| "Person#{n}" } 

    factory :user do 
    username "example_user" 
    password "foobar" 
    password_confirmation "foobar" 
    end 
end 

我創建了一個用戶像往常一樣,然後多個用戶的我做了以下內容:30.times { FactoryGirl.create(:user, username: FactoryGirl.generate(:username)) }

希望這可以幫助別人的未來(:

3

這可能是更容易做

FactoryGirl.define do 
    sequence(:username) { |n| "Person#{n}" } 

    factory :user do 
    username 
    password "foobar" 
    password_confirmation "foobar" 
    end 
end 

然後

FactoryGirl.create(:user) 

當你想定製,以獲得一個序列的用戶名和

FactoryGirl.create(:user, username: "some_name") 

相關問題