assigns_to не работает для Rails 3 Следует в Ubuntu
Я использую Rails3 с rspec и musta. У меня есть ниже спецификации
describe PagesController, "on GET to show while logged off" do
before(:each) do
@site = Factory.create(:site)
@site.domains << Factory.create(:domain)
@site.save!
@site.pages << Factory.create(:page)
@site.menus << Factory.create(:menu, {:site=>@site, :is_visible=>true})
@site.menus << Factory.create(:menu, {:site=>@site, :is_visible=>true})
@site.menus << Factory.create(:menu, {:is_visible=>false, :site=>@site})
get :show
end
it { should render_template(:show) }
it { should render_template('layouts/2col') }
it { should assign_to(:site) }
it { should assign_to(:site).with(@site) }
it { should assign_to(:site).with(@site) }
it { should assign_to(:page).with(@site.pages[0])}
it "show visible menu_items only" do
assert assigns[:menu_items].length == 2
end
end
Вот мой Gem File
group :development, :test do
gem 'autotest'
gem 'factory_girl'
gem 'rspec', '>=2.0.0.beta.19'
gem 'rspec-rails', '>=2.0.0.beta.17'
gem 'shoulda'
end
и вот мой spec_helper
require 'rspec/rails'
require 'shoulda'
require 'shoulda/integrations/rspec2'
require 'authlogic/test_case'
require 'factory_girl
Хорошо, пока все довольно близко соответствует тому, что я видел раньше, однако всякий раз, когда я запускаю свои тесты, я получаю ошибки, как показано ниже
1) PagesController on GET to show while logged off
Failure/Error: it { should assign_to(:site) }
Expected action to assign a value for @site
# ./spec/controllers/pages_controller_spec.rb:19
Я не думал, что код был сломан, но приложение работает правильно. Также, если я проверяю, что значения присваиваются с помощью команды assigns[:site], тогда тест проходит успешно.
Кто-нибудь знает, что мне нужно изменить, чтобы эти тесты снова заработали.
Заранее спасибо
Энди
2 ответа
Вам нужно позвонить subject { controller }
до вашего it
заявления. Это на самом деле так сильно смутило меня, что я написал свой первый пост в блоге об этом.
Если вы используете Ruby 1.9.2, assign_to
совпадение с shoulda-matchers
версия gem ниже 1.0.0beta2 все равно не будет работать, даже если вы включите subject { controller }
(что, я считаю, на самом деле не нужно).
Это вызвано изменением в Ruby 1.9.2. Вот отчет об ошибке для musta. Исправление уже включено и выпущено в shoulda-matchers
версия 1.0.0beta2.
Так что просто имейте это в своем Gemfile
:
group :development, :test do
gem 'shoulda-matchers'
...
и обновите до последней версии (1.0.0.beta2 atm):
bundle update shoulda-matchers