How come Factory Girl isn't sequencing unique attributes?

 ̄綄美尐妖づ 提交于 2019-12-03 12:10:54

问题


My controller spec fails because Factory Girl seems to be creating non-unique Users even though I sequence the User attributes that need to be unique.

The Errors

  1) TopicsController POST #create when topic is invalid should render new
     Failure/Error: let(:invalid_topic) {Factory.build :invalid_topic}
     ActiveRecord::RecordInvalid:Validation failed: Email has already been taken, Username has already been taken

  2) TopicsController POST #create when topic is valid should redirect to show
     Failure/Error: let(:valid_topic) {Factory.build :topic}
     ActiveRecord::RecordInvalid:
       Validation failed: Email has already been taken, Username has already been taken

The Controller Spec (RSpec)

  describe "POST #create" do                          
    let(:valid_topic) {Factory.build :topic}
    let(:invalid_topic) {Factory.build :invalid_topic}

    context "when topic is invalid" do
      it "should render new" do
        post :create, :topic => invalid_topic
        response.should render_template(:new)
      end
    end
    context "when topic is valid" do
      it "should redirect to show" do
        post :create, :topic => valid_topic
        response.should redirect_to(topic_path(assigns(:topic)))
      end
    end
  end

The Factories

Factory.define :user do |f|
  f.sequence(:username) { |n| "foo#{n}"}
  f.password "password"
  f.password_confirmation { |u| u.password}
  f.sequence(:email) { |n| "foo#{n}@example.com"}
end

Factory.define :topic do |f|
  f.name "test topic"
  f.association :creator, :factory => :user
  f.forum_id 1
end

Why isn't Factory Girl sequencing the User attributes when I use Factory.create :topic?


回答1:


rake db:test:prepare seemed to fix the problem.

Not sure why, though. The schema hadn't been changed.




回答2:


Please, consider using database_cleaner gem. One was designed specifically to fulfill the purpose of cleaning up database between test runs.

This post explains pretty much everything.




回答3:


You should consider deleting all topics by hand in the end of the test. Of course, it is not number one solution but worked out for me real great.

after(:all) { Topic.delete_all }


来源:https://stackoverflow.com/questions/6091039/how-come-factory-girl-isnt-sequencing-unique-attributes

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!