0

午後の皆さん、

私はレールのテスト側を学び始めたばかりで、以下でこれに問題があります。

何をテストしようとしているのかを簡単に説明しましょう。ユーザーが 10 個の承認済みスニペットを作成した場合、そのランクは == 「作成者」である必要があります。工場にリストした本のスニペットが作成されましたが、私のコードはすべてめちゃくちゃで、これをどのように記述すればよいかわかりません。

テストのために遊んでいるコードは次のとおりです。

describe "ranking" do

    let!(:book) { Book.create }

    let!(:snippet) { FactoryGirl.create(:snippet1, :book1 => book) }

      context "should be author after 10 approved posts" do

         10.times do

          FactoryGirl.create(:snippet1)

         end

         user.user_rank.should == "Author"

      end

  end

ここに私の工場があります:

FactoryGirl.define do

  factory :admin2, class: User do

    first_name "admin1"

    last_name "minstrator"

    password "admin1234"

    profile_name "profilename"

    email "admin1@admin.com"

    password_confirmation "admin1234"

    admin true

    end



    factory :user2, class: User do

    first_name "user2"

    last_name "man2"

    password "user1234"

    profile_name "profilename"

    email "user2@user.com"

    password_confirmation "user1234"

    admin false

    end



    factory :book1, class: Book do

    title "Book1"

    approved true

    size 0

    end



    factory :snippet1, class: Snippet do

    content "Snippet1"

    approved true

    end



  end

編集: エラーと関連コード:

app/models/snippet.rb:32:in `size_limit': undefined method `size' for nil:NilClass (NoMethodError)

これは、以下に示すモデルの検証に関連しています。

  BOOK_SIZE = { 

    0 => {'per' => 500, 'total' => 15000},

    1 => {'per' => 700 , 'total' => 30000},

    2 => {'per' => 1000, 'total' => 50000}

  }





   def size_limit 

    book_limit = self.book.size.to_i

    word_count = self.content.scan(/\w+/).size.to_i

    current_snippets_size = (self.book.get_word_count || 0) + word_count 

    errors.add(:base, "Content size is too big") unless word_count < BOOK_SIZE[book_limit]['per'] && current_snippets_size < BOOK_SIZE[book_limit]['total']    

  end
4

2 に答える 2

1

あなたのlet(:snippet)句は:book1属性を使用していますが、コードはそれをチェックしていますself.book– それはそれでしょうか?

いずれにせよ、リストした snippet.rb の抜粋には 2 つの参照があり.sizeます。行番号がわからないため、どちらがエラーをスローしているかを判断するのは困難です。

したがって、 book 属性または content 属性のいずれかが nil を返しているため、その nil 属性で size を呼び出すと、発生しているエラーが発生します。

スニペットが本の参照と nil 以外のコンテンツでのみ有効な場合は、それらの条件の検証を追加します。これらの属性nil になる可能性がある場合は、コードでそれが考慮されていることを確認してください。

于 2013-11-05T12:03:32.277 に答える
1

あなたの snippet1 ファクトリには user_id またはそのようなものが必要だと思います。これで、関連付けなしで 10 個のスニペットを作成できます

編集:あなたの編集を読みました。しかし、雇用はほとんど同じです。あなたの snippet1 ファクトリには本がないため、これに関するエラー

self.book.size.to_i
于 2013-11-05T11:58:24.520 に答える