0

私はRuby on Railsの中で自分の関数のテストを行っています。ただし、ステータスコード406を受け取った後に、テスト(ステータスコード:successが必要)が失敗します。ここでは、正確な障害ログがあります:Railsはステータスコード406で応答します

Failure: Expected response to be a <:success>, but was <406>. 
test_should_post_comment_through_token_successfully(CommentControllerTest) 
test/functional/comment_controller_test.rb:271:in `block in <class:CommentControllerTest>' 

私は406応答について少し読んで、そしてそれは「受け入れられない」の略であることが分かりました。だから私はAcceptContent-TypeAccept-LanguageAccept-Charsetヘッダーを設定しようとしましたが、私は運がなかった。

ここに私のテストのためのコードです:コントローラ内部の

test 'should post comment through token successfully' do 
    @params = { 
    id: 1, 
    body: "Test Comment", 
    username: "Bob" 
    } 

    @headers = { 
    "Accept" => "application/json", 
    "Accept-Language" => "en-US", 
    "Accept-Charset" => "utf-8", 
    "Content-Type" => "application/json", 
    "Token" => "abcdefg12345" 
    } 

    get :create_by_token, @params, @headers 
    assert_response :success 
end 

create_by_token機能:

def create_by_token 
    @node = Node.find params[:id] 
    @user = User.find_by_username params[:username] 
    @body = params[:body] 
    @token = request.headers['Token'] 
    p request.headers["Accept"] 
    p request.headers["Content-Type"] 
    p request.headers["Token"] 

    if @user && @user.token == @token 
    begin 
     @comment = create_comment(@node, @user, @body) 
     msg = { 
     status: :created, 
     message: "Created" 
     } 
     respond_to do |format| 
     format.xml { render xml: msg.to_xml } 
     format.json { render json: msg.to_json } 
     end 
    rescue CommentError 
     msg = { 
     status: :bad_request, 
     message: "Bad Request" 
     } 
     respond_to do |format| 
     format.xml { render xml: msg.to_xml } 
     format.json { render json: msg.to_json } 
     end 
    end 
    else 
    msg = { 
     status: :unauthorized, 
     message: "Unauthorized" 
    } 
    respond_to do |format| 
     format.xml { render xml: msg.to_xml } 
     format.json { render json: msg.to_json } 
    end 
    end 
end 

マイルート:

post '/bot/comment.:format', to: 'comment#create_by_token' 

私は重要な何かをしないのですが?この問題を解決するにはどうすればよいですか?

必要な情報をお寄せいただきありがとうございます。

+1

実際のコントローラコードが表示されない場合、私たちは役に立たない可能性があります。 – mudasobwa

+0

@mudasobwa関連する機能も追加します。 – Ryzokuken

+0

@ mudasobwa done。 – Ryzokuken

答えて

0

ああ、愚かな私。私が渡していたすべてのパラメータの中で、URLの内部にもフォーマットが渡されていることに気付きました。しかし、テストのように、接尾辞(.xmlまたは.json)の形式で渡すことのできるURLについては言及していなかったので、明示的にパラメータ内にformatを記述する必要があります。更新されたテストコードは次のとおりです。

test 'should post comment through token successfully' do 
    @params = { 
    id: 1, 
    body: "Test Comment", 
    username: "Bob", 
    format: 'json' 
    } 

    @headers = { 
    "token" => "abcdefg12345" 
    } 

    post :create_by_token, @params, @headers 
    assert_response :success 
end 

この結論を導くためのKudos @ソウミーヤ。あなたの答えは私が必要としていた解決策ではありませんでしたが、それは私に考えさせました。

0

これはrespond_to doブロックでエラーと思われます。リソースまたはリソースとして設定しているかどうかを確認してください。

respond_to doブロックで役立つ単数以外のリソースへの更新を行います。

また、ルートを/と更新することもできます。

resources :samples, defaults: {format: :json} 
+0

上記のルートを追加しました。問題があるかどうか確認してください。 – Ryzokuken

関連する問題