2

代わりにエラーが発生する rspec2 テストを作成しようとしています。私は、このテストが現在特に何もテストしていないことを知っています。しかし、後でさらにコードを追加します。最初にこの部分を渡したいと思います。

context "/login/twitter" do
        before(:each) do
            request_token = double("request_token")
            request_token.stub(:authorize_url).and_return("http://api.twitter.com/oauth/authenticate?oauth_token")

            TwitterService.any_instance.stub(:authentication_request_token).and_return(request_token)
            get '/login/twitter'
        end

        it "should redirect to twitter authorized url" do
            last_response.header["Location"].should include "http://api.twitter.com/oauth/authenticate?oauth_token"
        end

        it "should redirect back to home page if error occurs" do

        end
    end

そして、これは私のコントローラーです

get '/login/twitter' do
  begin
    request_token = TwitterService.new.authentication_request_token

    session[:request_token_twitter] = request_token

    logger.info(request_token.authorize_url)

    redirect request_token.authorize_url
  rescue Exception => e
    logger.error(e.message)
    redirect '/'
  end  
end

そして、これは私が得たエラーです

  1) Server /login/twitter should redirect to twitter authorized url
     Failure/Error: get '/login/twitter'
     TypeError:
       singleton can't be dumped
     # ./spec/twitter_route_spec.rb:25:in `block (3 levels) in <top (required)>'

私が逃したものがわからない。

4

1 に答える 1

3

セッションに何かを貼り付けるには、シリアル化する必要があり、モック オブジェクトをシリアル化することはできません。rspec モックの実装は、シングルトンを使用するか、シングルトン メソッドを定義するように見えます。

オブジェクトをダンプできるふりをするために、どのメソッドをスタブ化する必要があるかを試してみることができます (おそらくdump)。

于 2013-07-01T07:25:18.720 に答える