所以我在这里使用Rails 4创建一个Web应用程序,如果它有助于我使用Mountain Lion在Mac上,使用Aptana Studio 3进行开发。
我正在尝试创建一个页面,列出并分页我的应用程序的用户。我正在使用will_paginate和bootstrap-will_paginate来做到这一点。当我使用我的数据库上的示例用户运行rails服务器时它非常有效,但是当我使用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
缺少什么?还有什么我应该看的吗?同样,失败的测试是关于授权的页面上的测试。这些包括我的authorization_pages_spec.rb中的一些
非常感谢!
答案 0 :(得分: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)) }
希望这可以帮助将来的某个人(:
答案 1 :(得分: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")
当您想要自定义时。