2

ペーパークリップの添付ファイルが画像であり、5MBを超えていないことを検証するために使用しているカスタムバリデーターがいくつかあります。すべてが期待どおりに機能します

しかし、私は1つのことに少し興味があります。私の統合テストでは、アップロードに失敗した後、天気user.avatarがゼロであることが確認され、ランダムなものが返されます。

テスト:

 it 'Does not allow a non-image file to be uploaded as an avatar' do
   visit edit_user_path(@user)
   attach_file('user_avatar', File.dirname(__FILE__)+'/users_spec.rb')
   click_button 'Update'
   page.should have_content "Avatar must be an image"
   @user.reload
   @user.avatar.should be_nil
 end

結果:

1) Users Avatars Does not allow a non-image file to be uploaded as an avatar
 Failure/Error: @user.avatar.should be_nil
   expected: nil
        got: /avatars/original/missing.png
 # ./spec/requests/users_spec.rb:147:in `block (3 levels) in <top (required)>'

これはある種のデフォルトのプレースホルダーペーパークリップがそこに貼り付いていると思いますが、ユーザーshowページに移動する@user.avatarnil予想どおりです。何が得られますか?

私も試しましたが、同じ結果になりました

@user.should_not have_attached_file(:avatar)

それがペーパークリップ独自のマッチャーであることを考えると、それは機能するはずのようですが、それも失敗します

いくつかのプットステートメントの後、何かが行われる前に@user.avatar利回りが表示/avatars/original/missing.pngされるので、少なくとも変更されていないことは確かだと思います。

4

1 に答える 1

1

あはは!ファイル?指定されたフィールドにファイルが添付されている場合、メソッドはtrueを返すため、次のコードで必要なテストを実行できます。

@user.avatar.file?.should be_false
于 2012-05-23T18:45:50.670 に答える