所以我需要一个辅助函数来创建未经处理的推文'类似于我从Twitter API gem中获得它们的方式,所以我可以在某些条件下测试我的模型功能。
为此,我在对象describe中添加了一个辅助函数,如下所示:
describe Tag, :type => :model do
# Helpers
###
def unprocessed_tweets(count, name, start_date, end_date)
tweets = []
count.times do |index|
tweet = OpenStruct.new
tweet.favorite_count = "3"
tweet.filter_level = "high"
tweet.retweet_count = "12"
tweet.text = "#{name}"
if index == 0
tweet.created_at = start_date
elsif index == (count-1)
tweet.created_at = end_date
else
tweet.created_at = start_date
end
tweets.push tweet
end
tweets
end
我还添加了一项测试,以确保我的助手按照我的预期进行长期工作:
it "has a helper for generated unprocessed tweets" do
tag_name = "justin"
start_date = '2015-09-12 2:31:32 0'
end_date = '2015-09-13 2:31:32 0'
tweets = unprocessed_tweets(3, tag_name, start_date, end_date)
expect(tweets.size).to eq 3
expect(tweets.first.favorite_count).to eq "3"
expect(tweets.first.created_at).to eq start_date
expect(tweets.last.created_at).to eq end_date
expect(tweets.last.text).to eq tag_name
end
这是最佳做法吗?
答案 0 :(得分:11)
您可以在名为spec/support
的{{1}}中创建一个新文件,并将此内容放入其中:
tweet_helpers.rb
您的规范测试文件应如下所示:
module TweetHelpers
def unprocessed_tweets(count, name, start_date, end_date)
tweets = []
count.times do |index|
tweet = OpenStruct.new
tweet.favorite_count = "3"
tweet.filter_level = "high"
tweet.retweet_count = "12"
tweet.text = "#{name}"
if index == 0
tweet.created_at = start_date
elsif index == (count-1)
tweet.created_at = end_date
else
tweet.created_at = start_date
end
tweets.push tweet
end
tweets
end
end
我认为在单独的模块中定义辅助方法而不是拥挤规范测试文件本身是个好习惯。
有关更多信息和示例,请参阅this。