2017-09-24 3 views
0

私は、ユーザーがタイムスタンプされている「覗き見」を投稿できるプログラムを持っています。どのように私はカピバラを使用してこれをテストできますか?この問題は、新しいタイムスタンプが作成されるたびに発生し、時間が異なります。私はカピバラにある種のスタブ/モックを作らなければなりませんか?ヘルプは非常に高く評価されます。ありがとうございました。カピバラを使ってタイムスタンプをテストするには?

class Peep 

    include DataMapper::Resource 

    property :id, Serial 
    property :title, String 
    property :text, String 
    property :created_at, DateTime 

end 

DataMapper.setup(:default, "postgres://localhost/chitter_#{ENV['RACK_ENV']}") 
DataMapper.finalize 
DataMapper.auto_upgrade! 

App.rb:

require 'data_mapper' 
require 'sinatra/base' 
require 'sinatra/flash' 
require_relative './models/peep.rb' 
require_relative './models/user.rb' 
ENV["RACK_ENV"] ||= "development" 

class Chitter < Sinatra::Base 

    enable :sessions 
    register Sinatra::Flash 
    set :session_secret, 'super secret' 

    get '/' do 
    'You arrived at the homepage' 
    end 

    get '/peeps' do 
    @peeps = Peep.all 
    erb(:index) 
    end 

    get '/peeps/new' do 
    erb(:new) 
    end 

    get '/users/new' do 
    @user = User.new 
    erb(:'users/new') 
    end 

    post '/users' do 
    @user = User.create(email: params[:email], 
        password: params[:password], 
        password_confirmation: params[:password_confirmation]) 
    if @user.save 
     session[:user_id] = @user.id 
     redirect to('/peeps') 
    else 
     flash.now[:errors] = @user.errors.full_messages 
     erb(:'users/new') 
    end 

    end 

    post '/peeps' do 
    peep = Peep.new(title: params[:title], text: params[:text]) 
    peep.save 
    redirect to('/peeps') 
    end 

    helpers do 
    def current_user 
     @current_user ||= User.get(session[:user_id]) 
    end 
    end 

    run! if app_file == $PROGRAM_NAME 
end 

再生回数:

<h1> Peeps </h1> 

<ul id='peeps'> 
    <% @peeps.reverse.each do |peep| %> 
    <li id="peeps"> 
    Title: <%= peep.title %> 
    Text: <%= peep.text %> 
    created_at: <%= peep.created_at %> 
    </li> 
    <% end %> 
</ul> 
+1

正確に何をテストしたいですか?あなたはどのように試しましたか?フェッチしている問題は何ですか? –

答えて

1

あなたはRSpecのを使用している場合は、おそらくのような何かを行うことができます:

RSpec.describe Peep do 
    let(:peep) { Peep.create(title: "My title", text: "Some text") } 

    describe "#created_at" do   
    it { expect(peep).to respond_to(:created_at) } 
    it { expect(peep.created_at).to be_kind_of(DateTime) } 
    end 
end 

を私が推薦します機能性が徹底的にテストされていないDataMapperは、意図したとおりに動作します。それはテストされている第三者図書館です。ただし、上記の仕様では、property :created_at, DateTimeという行を正しく追加しているかどうかのテストを行うことができます。

2

カピバラ駆動機能検査でこれを行う場合は、最も簡単な解決策は、時間などtimecopなどのソリューション凍結/旅のいずれかを使用することである - https://github.com/travisjeffery/timecopを - あなたのテストには時間がフリーズする方法に包まれることができるように。

Timecop.freeze(specific_datetime) do 
    # fill out form 
    ... 
    # submit form 
    ... 
    expect(page).to have_content("created_at: #{specific_datetime.tos}") # format the specific_datetime as expected 
end 

注:日付が実際にJSでブラウザに設定されていた場合は、あまりにも、ブラウザの時間を凍結するsinon.jsのようなものを使用する必要があると思います。

関連する問題