RSpec должен redirect_to проблема - PullRequest
11 голосов
/ 15 марта 2009

Я пишу спецификацию для моего контроллера Rails, это тестируемое действие:

def create
  @course = Course.new(params[:course])
  if @course.save then
    #flash[:notice] = 'Course Created'
    redirect_to courses_path
  else
    render :action => 'new', :status => 400
  end
end

И это спецификация, которая подтверждает это:

describe "POST /courses [Good Input]" do

  it "should redirect to Courses index page after creation" do
    @course.stub!(:save).and_return(true)
    post :create
    response.should be_success
    response.should redirect_to(courses_path)
  end

end

Тем не менее я получаю эту ошибку от RSpec:

'КурсыКонтроллер POST / курсы [Хорошо Ввод]

следует перенаправить на курсы индексная страница после создания '

FAILED

ожидаемый редирект на "/ курсы", получил без перенаправления

Есть идеи, почему это происходит?

решаемые

как указано rishavrastogi , должно быть be_success ожидает http-код в диапазоне 2xx, и перенаправление попадает в диапазон 3xx (фактически его 302)

Утверждение необходимо изменить на => response.should be_redirect .

Хотя в этом случае избыточно проверять, является ли ответ перенаправлением, а затем проверять, что перенаправляет на определенную страницу, так что утверждение больше не требуется.

Ответы [ 2 ]

5 голосов
/ 16 марта 2009

Я тоже не RSpec-er, но я думаю, что «response.should be_success» не должно быть там, потому что ответ на самом деле «перенаправление HTTP», а не «HTTP success» ... поэтому попробуйте удалить response.should be_success

Также изменить

 post :create 

до

 post :create, :course => {} 
0 голосов
/ 15 марта 2009

Я не rspecer, но на самом деле вы должны сделать что-то вроде assigns(:course).stub!.... Переменные экземпляра в спецификациях не совпадают с переменными экземпляра в контроллерах, assigns, поэтому позволяет получить доступ к переменным контроллера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...