Правильный способ добавления вспомогательных функций для спецификации rspec

Поэтому мне нужна вспомогательная функция для создания «необработанных твитов», подобно тому, как я могу получать их из драгоценного камня Twitter API, чтобы я мог тестировать функциональность своих моделей при определенных условиях.

Для этого я добавил вспомогательную функцию внутри описания моих объектов, например:

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

Это лучшая практика для этого?


person NNNNNNNNNNDelicious    schedule 16.09.2015    source источник


Ответы (1)


Вы можете создать новый файл в 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

И ваш тестовый файл спецификации должен выглядеть так:

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

Я думаю, что это хорошая практика, чтобы определить ваши вспомогательные методы в отдельном модуле, а не переполнять сам тестовый файл спецификации.

См. это для получения дополнительной информации и примеров.

person K M Rakibul Islam    schedule 16.09.2015