Ruby on rails Rspec创建多个帖子以检查排名
下午好, 我刚刚开始学习rails的测试方面,在下面遇到了一些问题 让我快速解释一下我要测试的内容。如果用户创建了10个经批准的代码段,则其排名应为“作者”。我在工厂里列出的一本书上创建了一个代码片段,但我的代码都是乱七八糟的,我不知道该怎么写 以下是我在测试中使用的代码:Ruby on rails Rspec创建多个帖子以检查排名,ruby-on-rails,rspec,factory-bot,Ruby On Rails,Rspec,Factory Bot,下午好, 我刚刚开始学习rails的测试方面,在下面遇到了一些问题 让我快速解释一下我要测试的内容。如果用户创建了10个经批准的代码段,则其排名应为“作者”。我在工厂里列出的一本书上创建了一个代码片段,但我的代码都是乱七八糟的,我不知道该怎么写 以下是我在测试中使用的代码: describe "ranking" do let!(:book) { Book.create } let!(:snippet) { FactoryGirl.create(:snippet1, :book
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
BOOK_SIZE={
0=>{'per'=>500,'total'=>15000},
1=>{'per'=>700,'total'=>30000},
2=>{'per'=>1000,'total'=>50000}
}
def尺寸限制
书本限制=self.book.size.to\u i
word\u count=self.content.scan(/\w+/).size.to\i
当前片段大小=(self.book.get_单词数| | 0)+单词数
错误。添加(:base,“内容大小太大”),除非word\u count
我认为snippet1工厂应该有用户id或类似的东西。现在您创建了10个没有关联的代码段
编辑:现在我读了你的编辑。但雇佣几乎是一样的。您的snippet1工厂没有任何书籍,因此在这方面存在错误
self.book.size.to_i
您的let(:snippet)
子句使用了:book1
属性,但代码正在检查self.book
——可能是这样吗
无论哪种方式,您列出的snippet.rb摘录都有两个对.size
的引用-如果不知道行号,我们很难判断是哪一个引发了错误
因此,book属性或content属性都返回nil–因此,当您调用该nil属性的size时,您会得到正在发生的错误
如果代码段仅对书籍引用和非nil内容有效,请为这些条件添加验证。如果在某些情况下这些属性可能为零,请确保您的代码考虑到这一点。那么会发生什么?考试不及格?您是否收到错误?好的,那么我是否能够在代码段工厂中定义图书工厂?我还以为他们会加入呢!也可以像创建“let!(:snippet)…”一样定义它,比如:“FactoryGirl.create(:snippet1,user\u id:user.id,book\u id:book.id)”。我不知道你的联想看起来怎么样。或者您可以在工厂中构建“关联:用户”