Не уверен, что это проблема Rails 3 или проблема RSpec 2, но я не могу заставить работать стандартный тест контроллера - похоже, что метод 'get' не найден.
У меня есть тест контроллера, который выглядит следующим образом (с именем discrepancies_controller_spec.rb
в каталоге spec/controllers
):
require 'spec_helper'
describe DiscrepanciesController do
before :each do
Discrepancy.delete_all
end
it "resolves a discrepancy" do
discrepancy = Discrepancy.create(:my_number=>"12345", :status=>"Open")
get :resolve, :id => discrepancy.id
retrieved_discrepancy = Discrepancy.find_by_my_number("12345")
retrieved_discrepancy.status.should == "Resolved"
end
end
(Да, я знаю о последствиях безопасности для изменения данных с помощью HTTP / GET - это отдельная проблема ...)
Когда я запускаю его с помощью rake, я получаю следующую ошибку:
1) DiscrepanciesController resolves a discrepanc
Failure/Error: Unable to find C to read failed line
undefined method `get' for #<RSpec::Core::ExampleGroup::Nested_1:0xc9170d0 @__memoized={}>
# ./spec/controllers/discrepancies_controller_spec.rb:38 (ignore the line number, commented out code was removed from the sample)
# C:/Users/Patrick_Gannon/.bundle/ruby/1.8/bundler/gems/rails-16a5e918a06649ffac24fd5873b875daf66212ad-master/activesupport/lib/active_support/dependencies.rb:212:in `inject'
# C:/Ruby187/bin/rake:19:in `load'
# C:/Ruby187/bin/rake:19
Мне удается протестировать действие контроллера, создав сам экземпляр контроллера и вызвав действие контроллера напрямую, и это работает, но это ужасно, потому что мне приходится высмеивать такие вещи, как respond_to
и params
.
Другая важная информация: я использую 32-битную Windows 7, Ruby 1.8.7 (уровень обновления 24-01 2010-10-10) [i386-wingw32], пограничные Rails 3 и MongoDB / MongoMapper. Вот мой список установленных драгоценных камней (через 'bundle gem' - все мои установленные драгоценные камни были установлены Bundler)
- аннотация (1.0.0)
- actionmailer (3.0.0.beta4)
- actionpack (3.0.0.beta4)
- activemodel (3.0.0.beta4)
- activerecord (3.0.0.beta4)
- activeresource (3.0.0.beta4)
- activesupport (3.0.0.beta4)
- Арель (0.4.0)
- bcrypt-ruby (2.1.2)
- bson (1.0.3)
- bson_ext (1.0.1)
- строитель (2.1.2)
- связка (0.9.26)
- Капистрано (2.5.19)
- капибара (0.3.8 a94f99)
- огурец (0,8,3)
- огурцы-рельсы (0.3.2 master-b75110)
- Стойкость (0.2.10)
- database_cleaner (0.5.2 7ea99d)
- devise (1.1.rc1 88ab2f)
- diff-lcs (1.1.2)
- erubis (2.6.5)
- factory_girl (1.3.0)
- factory_girl_rails (1.0)
- фейкер (0.3.1)
- ffi (0.6.3)
- корнишон (2.0.2)
- Highline (1.5.2)
- i18n (0.4.1)
- jnunemaker-validatable (1.8.4)
- соединение (0,3,2 11a094)
- json_pure (1.4.3)
- почта (2.2.5)
- MIME-типы (1,16)
- Монго (1.0.3)
- mongo_mapper (0.8.2)
- net-scp (1.0.2)
- net-sftp (2.0.4)
- net-ssh (2.0.23)
- net-ssh-gateway (1.0.1)
- нокогири (1.4.2.1)
- отважный (0.3.2)
- полиглот (0.3.1)
- стойка (1.1.0)
- для монтажа в стойку (0.6.6)
- рейк-тест (0.5.4)
- рельсы (3.0.0.beta4 6682cc)
- рельсы (3.0.0.beta4)
- грабли (0.8.7)
- rspec (2.0.0.beta.13)
- rspec-core (2.0.0.beta.13)
- ожидания rspec (2.0.0.beta.13)
- rspec-mocks (2.0.0.beta.13)
- rspec-rails (2.0.0.beta.13)
- селен-вебдрайвер (0.0.24)
- term-ansicolor (1.0.5)
- тор (0,13,6)
- верхушка дерева (1.4.8)
- Троллоп (1.16.2)
- tzinfo (0.3.22)
- палочка (0.2.1)
- начальник (0.10.7)
- вебрат (0.7.1)
Я также добавил в тест оператор put, чтобы показать, какие методы доступны в тестовом приспособлении ((methods - Object.methods).sort.inspect
), а «get» отсутствует в списке. Вот что есть в списке:
"__memoized", "__should_for_example_group__", "__should_not_for_example_group__", "_fixture_class_names", "_fixture_path", "_fixture_table_names", "_pre_loaded_fixtures", "_setup_mocks", "_teardown_mocks", "_use_instantiated_fixtures", "_use_transactional_fixtures", "_verify_mocks", "a_kind_of", "allow_message_expectations_on_nil", "an_instance_of", "any_args", "anything", "assert", "assert_block", "assert_equal", "assert_in_delta", "assert_instance_of", "assert_kind_of", "assert_match", "assert_nil", "assert_no_match", "assert_not_equal", "assert_not_nil",
"assert_not_same", "assert_nothing_raised", "assert_nothing_thrown", "assert_operator", "assert_raise", "assert_raises", "assert_respond_to", "assert_same", "assert_send", "assert_throws", "be", "be_a", "be_a_kind_of", "be_a_new", "be_an", "be_an_instance_of", "be_close", "be_false", "be_instance_of", "be_kind_of", "be_nil", "be_true", "boolean", "build_message", "change", "described_class", "double", "duck_type", "eq", "eql", "equal", "example", "example=", "exist", "expect", "fixture_class_names", "fixture_class_names?", "fixture_path", "fixture_path?", "fixture_table_names",
"fixture_table_names?", "flunk", "hash_including", "hash_not_including", "have", "have_at_least", "have_at_most", "have_exactly", "include", "instance_of", "kind_of", "match", "method_missing", "method_name", "mock", "mock_discrepancy", "mock_model", "no_args", "pending", "pre_loaded_fixtures", "pre_loaded_fixtures?", "raise_error", "respond_to", "run_in_transaction?", "running_example", "satisfy", "setup_fixtures", "stub_model", "subject", "teardown_fixtures", "throw_symbol", "use_instantiated_fixtures", "use_instantiated_fixtures?", "use_transactional_fixtures", "use_transactional_fixtures?"