NNN*_*ous 9 rspec ruby-on-rails stubbing
所以我需要一个辅助函数来创建"未处理的推文",类似于我从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
Run Code Online (Sandbox Code Playgroud)
我还添加了一项测试,以确保我的助手按照我的预期进行长期工作:
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
Run Code Online (Sandbox Code Playgroud)
这是最好的做法吗?
K M*_*lam 13
您可以在spec/support
被调用中创建一个新文件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
Run Code Online (Sandbox Code Playgroud)
您的spec测试文件应如下所示:
require './spec/support/tweet_helpers'
RSpec.configure do |c|
c.include TweetHelpers
end
RSpec.describe "an example group" do
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
end
Run Code Online (Sandbox Code Playgroud)
我认为在单独的模块中定义辅助方法而不是拥挤规范测试文件本身是一种很好的做法.
见这为更多信息和示例.
归档时间: |
|
查看次数: |
5961 次 |
最近记录: |