Rspec创建多个帖子来检查排名

时间:2013-11-05 11:48:56

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

下午全部,

我刚刚开始学习rails的测试方面,并在下面遇到一些麻烦。

让我快速解释一下我要测试的内容。如果用户创建了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

2 个答案:

答案 0 :(得分:1)

我认为你的snippet1工厂应该有user_id或类似的东西。现在你创建10个没有关联的片段

修改:现在我看了你的编辑。但雇佣几乎是一样的。你的snippet1工厂没有任何书,所以这个错误

self.book.size.to_i

答案 1 :(得分:1)

您的let(:snippet)子句使用:book1属性,但代码正在检查self.book - 这可能是吗?

无论哪种方式,您列出的snippet.rb摘录都有两个对.size的引用 - 在不知道您的行号的情况下,我们很难判断哪一个引发错误。

因此book属性或content属性返回nil - 所以当你在nil属性上调用size时,你会得到正在发生的错误。

如果代码段仅对书籍参考和非零内容有效,请为这些条件添加验证。如果有些情况 可能为零,请确保您的代码允许这样做。