2017-09-24 2 views
0

나는 사용자가 타임 스탬프가 찍힌 '엿보는 소리'와 함께 게시 할 수있는 프로그램을 가지고있다. 카피 바라를 사용하여 어떻게 테스트 할 수 있습니까? 시간 스탬프가 달라질 때마다 문제가 발생합니다. 카피 바라에 스텁/모의 같은 것을 만들어야합니까? 도움말 크게 감사하겠습니다. 고맙습니다.capybara를 사용하여 타임 스탬프를 테스트하는 방법은 무엇입니까?

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 같은 것을 사용해야 할 것입니다.

관련 문제