Rails 4.1 + Rspec + rack-test: неопределенный метод `app'
Я работал над приложением Rails 4.1.1 и настраивал Rspec. Я хочу проверить контроллер, используя rask-test last_response
метод. Я следовал инструкциям и вот мой spec_helper.rb
файл
require 'rack/test'
require 'simplecov'
SimpleCov.start
RSpec.configure do |config|
config.include Rack::Test::Methods
end
и вот мой файл rails_helper:
ENV["RAILS_ENV"] ||= 'test'
require 'spec_helper'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
У меня есть мой пример Rspec, который прекрасно работает до этой строки:
r = JSON.parse(last_response)
Я получаю это сообщение об ошибке:
Failure/Error: r = JSON.parse(last_response)
NameError:
undefined local variable or method `app' for #<RSpec::ExampleGroups::AdminMailActionsController::New:0x007fb100dc5ab0>
У кого-нибудь есть представление о том, что здесь происходит?
РЕДАКТИРОВАТЬ: Вот тест:
describe "#new" do
it "should get the first job in the queue for the Cheat Cheat" do
@job_queue = FactoryGirl.create(:job_queue)
@job = FactoryGirl.create(:job, job_queue: @job_queue)
@organisation = @job_queue.organisation
@params = {:organisation_id => @organisation.id, :job_queue_id => @job_queue.id}
get :new, @params
p last_response.body
expect(response.status).to eq 200
expect(assigns(:job_queue)).to eq @job_queue
expect(assigns(:organisation)).to eq @organisation
expect(assigns(:job)).to eq @job
end
end
объект ответа огромен, а response.body пуст, когда я должен был @mail_action
, @job_queue
, @organisation
а также @job
имеется в наличии. Он отлично работает в браузере, поэтому переменная есть.
РЕДАКТИРОВАТЬ 2: Метод контроллера:
def new
@mail_action = MailAction.new
@mail_action.job_queue = @job_queue
@job_queue.organisation = @organisation
if @job_queue.jobs.first.nil?
@job = Job.new(
name: 'sample job',
short_code: 'oomph123',
job_status_updated_at: DateTime.now,
created_at: DateTime.now,
updated_at: DateTime.now,
job_status: Job::STATUS_ACCEPTED,
source_file: 'http://my_url.com/test_file.lol',
complete_file: 'http://my_url.com/awesome_file.lol'
)
Job.all.empty? ? @job.id = 1 : @job.id = Job.last.id + 1
@job.user = current_user
@job.job_action = JobAction.first
@job.job_queue = @job_queue
else
@job = @job_queue.jobs.first
end
end
Так что, если я правильно понял, я должен был @mail_action
, @job_queue
, @organisation
а также @job
имеется в наличии.