Подтвердить что ты не робот

RSpec должен перенаправить на проблему

Я пишу спецификацию для своего контроллера 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.

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

4b9b3361

Ответ 1

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

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

 post :create 

to

 post :create, :course => {} 

Ответ 2

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