0

Ruby on Rails (rails 3.2 バージョン) に関する Michael Hartl の素晴らしい本をフォローしています。セクション9.3.3 でいくつか問題があります。ページネーション

このように工場を変更した後spec/factories.rbsequence以前のバージョンはコメントアウトされていることに注意してください):

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){...}要素のシーケンスを作成しているので、この構文 ( ) をもう使用できないことはどういうわけか理にかなっていますが、これに対する修正を見つけることができないようです。

何か案は?ありがとう!

4

1 に答える 1

1

あなたの工場sequence(:name)ではなくという意味だと思います。メソッドではなく、モデル内sequence(:user)のメソッドを探していuser=ます。Username=

于 2013-09-18T21:45:02.473 に答える