0

次の例を書きました。

it "should assign @services containing all the current user services" do
  customer = FactoryGirl.create(:user, fullname: "Iris Steensma")
  sign_in customer
  service = FactoryGirl.create(:service, user: customer)
  puts "Service.count = #{Service.count}" # Service.count = 0
  get :home
  assigns[:services].should eq([service])
end

アクションコントローラーは次のとおりです。

def home
 #@services = curent_user.posted_services
 @services = Service.all
end

また、factory.rb には以下が含まれます。

FactoryGirl.define do

  sequence :address do |n|
    "Street #{n}"
  end

  factory :user do
    fullname "Foo Bar"
    email { "#{fullname.gsub(' ', '.').downcase}@example.com" if fullname }
    password "secret"
  end

  factory :preference do
    profile "customer"
    user
  end

  factory :service do
    status :pending
    source_addr { generate(:address) }
    target_addr { generate(:address) }
    passenger "Mis Daysi"
    start_at Time.now
    offer 5
    payment "cash"
    user
  end

end

Factory Girl がサービス レコードを作成できないのはなぜですか? ファクトリはテスト環境「rails c test」で正常に動作します

rspec の出力は次のとおりです。

Failures:

  1) UsersController GET home should assign @services containing all the current user services
     Failure/Error: assigns[:services].should eq([service])

       expected: [#<Service:0x460d8ea @name="Service_1003">]
            got: []

       (compared using ==)

       Diff:
       @@ -1,2 +1,2 @@
       -[#<Service:0x460d8ea @name="Service_1003">]
       +[]

     # ./spec/controllers/users_controller_spec.rb:26:in `block (3 levels) in <top (required)>'

Finished in 1.03 seconds
3 examples, 1 failure
4

2 に答える 2

0

正しい構文は次のとおりです。

assigns(:service).should eq([service])

rspecのドキュメントによると、assigns[key]インスタンス変数を割り当てる方法として使用されていましたが、これはあなたに起こっていることに少し似ています。

https://github.com/rspec/rspec-rails

于 2013-01-20T20:54:06.977 に答える
0

まず、 user: customer は必要ありません。これは、すでにそれを行っている customer.services.create を使用しているためです。

service = customer.services.create(attributes_for(:service, user: customer))

次に、 service = customer.services.create の後にこれを試してください

service.valid?
puts service.errors.inspect
puts service.user == customer

多分あなたも試すことができます

service = FactoryGirl.create(:service, :user => customer)

また、関連付けが Service クラスで定義されていると確信していますか?

しません

#<Service:0x57856f4 @name="Service_1003">

する必要があります

#<Service:0x57856f4 @name="Service_1003" user="<your customer object">

?

サービス工場はどのように定義されていますか?

于 2013-01-21T11:45:34.157 に答える