【问题标题】:Unable to assign output of FactoryGirl.create(:user) to a :user variable when factory uses 'sequence'当工厂使用“序列”时,无法将 FactoryGirl.create(:user) 的输出分配给 :user 变量
【发布时间】:2013-09-19 05:45:02
【问题描述】:

我正在关注 Michael Hartl 关于 Ruby on Rails 的精彩书籍(rails 3.2 版本)。我在 9.3.3 部分遇到了一些问题。分页

在我使用sequence 修改我在spec/factories.rb 的工厂之后(请注意,我已将以前的版本注释掉):

FactoryGirl.define do
    #factory :user do
    #   name "Michael Hartl"
    #   email "michael@example.com"
    #   password "foobar"
    #   password_confirmation "foobar"
    #end
    factory :user do
        sequence(:user){ |n| "Person #{n}" }
        sequence(:email){ |n| "person_#{n}@example.com"}
        password "foobar"
        password_confirmation "foobar"
    end
end

我不能再在我的测试中使用它了:

let(:user){ FactoryGirl.create(:user) }

以代码测试为例:

require 'spec_helper'

describe "User pages" do

    subject { page }
    describe "index" do

        let(:user){ FactoryGirl.create(:user) }

        before(:all){ 30.times {FactoryGirl.create(:user) }}
        after(:all) {User.delete_all}

        before(:each) do
            valid_signin user
            visit users_path
        end

        it { should have_selector('title', text: 'All users') }
        it { should have_selector('h1',  text: 'All users') }

.
.
.
end

返回错误,例如:

Failure/Error: before(:all){ 30.times {FactoryGirl.create(:user) }}
     NoMethodError:
       undefined method `user=' for #<User:0x00000002760140>
     # ./spec/requests/user_pages_spec.rb:16:in `block (4 levels) in <top (required)>'
     # ./spec/requests/user_pages_spec.rb:16:in `times'
     # ./spec/requests/user_pages_spec.rb:16:in `block (3 levels) in <top (required)>'

不知何故,我不能再使用这种语法 (let(:user){...}),因为我现在正在创建元素序列,但我似乎找不到解决这个问题的方法。

有什么想法吗?谢谢!

【问题讨论】:

  • 我认为应该是sequence(:name),而不是sequence(:user)
  • 该死!很明显,谢谢!

标签: ruby-on-rails ruby capybara factory-bot


【解决方案1】:

我认为您的意思是sequence(:name),而不是您工厂中的sequence(:user)。它正在您的User 模型中寻找user= 方法,而不是name= 方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-25
    相关资源
    最近更新 更多