ID проблемы с Mongoid и RSpec - PullRequest
       29

ID проблемы с Mongoid и RSpec

1 голос
/ 24 октября 2011

Итак, я какое-то время бился головой об этом и просто не мог добиться прогресса.

У меня есть следующие действия контроллера:

def create
  @job = Job.new(params[:job])

  respond_to do |format|
    if @job.save
      flash[:notice] = "The Job is ready to be configured"
      format.html { redirect_to setup_job_path(@job.id) }
      format.json { head :ok }
    else
      format.html { redirect_to new_job_path, notice: 'There was an error creating the job.' }
      format.json { render json: @job.errors, status: :unprocessable_entity }
    end
  end
end

Я пытаюсь проверить это действие. Вот мой тест для перенаправления на успешное создание.

it "redirects to the Job setup" do
    job.stub(:id=).with(BSON::ObjectId.new).and_return(job)
    job.stub(:save)
    post :create
    response.should redirect_to(setup_job_path(job.id))
end

Работа определена для всего набора здесь:

let (:job) { mock_model(Job).as_null_object }

Я получаю следующую ошибку:

2) JobsController POST create when the job saves successfully redirects to the Job setup
 Failure/Error: response.should redirect_to(setup_job_path(job.id))
   Expected response to be a redirect to <http://test.host/jobs/1005/setup> but was a redirect to <http://test.host/jobs/4ea58505d7beba436f000006/setup>

Я пробовал несколько разных вещей, но, что бы я ни пытался, я не могу получить правильный идентификатор объекта в моем тесте.

1 Ответ

1 голос
/ 25 октября 2011

Если вы заглушите :id=, вы создаете очень слабый тест. На самом деле, если вы не уверены в внутренностях Mongoid, скорее всего, ваши тесты не пройдут, если Mongoid изменит способ генерации идентификатора. И на самом деле это не работает.

Кроме того, имейте в виду, что вы создаете переменную job, но вы не передаете эту переменную внутри контроллера. Это означает, что действие :create инициализирует свой собственный экземпляр задания на

@job = Job.new(params[:job])

и он полностью игнорирует ваш job.

Я предлагаю вам использовать assigns.

it "redirects to the Job setup" do
  post :create
  response.should redirect_to(setup_job_path(assigns(:job)))
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...