2013-11-02 6 views
0

Просто уточнить: я новичок в Ruby and Rails.Получение «Ожидаемого ответа будет <:redirect>, но было <200>» при попытке пройти тест

Я судимый, чтобы решить мою проблему с sugestions в here, here и here, но они, похоже, не имеют прямое отношение с моей проблемой, или я слишком туп понимаем.

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

test "should not update status if nothing has changed" do 
    sign_in users(:rodrigo) 
    put :update, id: @status 
    assert_redirected_to status_path(assigns(:status)) 
    assert_equal assigns(:status).user_id, users(:rodrigo).id 
    end 

, и мой контроллер код обновления:

def update 
    @status = current_user.statuses.find(params[:id]) 
    @document = @status.document 
    if params[:status] && params[:status].has_key?(:user_id) 
     params[:status].delete(:user_id) 
    end 
    respond_to do |format| 
     if @status.update_attributes(params[:status]) && 
     @document && @document.update_attributes(params[:status][:document_attributes]) 
     format.html { redirect_to @status, notice: 'Status was successfully updated.' } 
     format.json { head :no_content } 
     else 
     format.html { render action: "edit" } 
     format.json { render json: @status.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

Я уже пытался, если @status.changed? проверить, и это на самом деле не было. У меня здесь нет вариантов. Если кто-то хочет помочь и нуждается в дополнительной информации, я могу это предоставить.

ответ

0

FACEPALM для меня ...

я уже упоминал в моем вопросе:

Я уже пытался проверить, если @status.changed?, и это на самом деле не было.

Он сделал изменения, когда я положил что-то другое в одном из атрибутов модели, но я только спросил .changed? после сохранения моей @status модели. Мне очень жаль, но я пока что выясняю, как работает Ruby on Rais.

Сказанное, я придумал решение моей проблемы, это просто установило только один атрибут моей модели (кроме id, конечно) со значением из хеша params[:status]. И ДО экономя его, спрашиваю, @status.changed?. Если это не так, я redirect_to не изменился @status, в противном случае я просто сохраню его и просмотрю старый код.

Конечно, это не распространяется на все мои сценарии, так как я также должен проверить, изменилась ли моя модель @document, но это не вопрос этого вопроса.