不知道这是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。
其他相关信息:我正在运行Windows 7 32位,Ruby 1.8.7(2010-01-10补丁程序级别249)[i386-wingw32],Edge Rails 3和MongoDB / MongoMapper。这是我已安装的宝石列表(通过“ bundle gem”-我所有已安装的宝石均由Bundler安装)
摘要(1.0.0)actionmailer(3.0.0.beta4)动作包(3.0.0.beta4)活动模型(3.0.0.beta4)活动记录(3.0.0.beta4)activeresource(3.0.0.beta4)主动支持(3.0.0.beta4)竞技场(0.4.0)bcrypt-ruby(2.1.2)野牛(1.0.3)bson_ext(1.0.1)建造者(2.1.2)捆绑器(0.9.26)Capistrano(2.5.19)水豚(0.3.8 a94f99)黄瓜(0.8.3)黄瓜导轨(0.3.2 master-b75110)卑鄙(0.2.10)database_cleaner(0.5.2 7ea99d)设计(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)高线(1.5.2)i18n(0.4.1)jnunemaker-validatable(1.8.4)关节(0.3.2 11a094)json_pure(1.4.3)邮件(2.2.5)哑剧类型(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)nokogiri(1.4.2.1)(0.3.2)多种语言(0.3.1)机架(1.1.0)机架安装(0.6.6)机架测试(0.5.4)导轨(3.0.0.beta4 6682cc)ties(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)selenium-webdriver(0.0.24)词色(1.0.5)雷神(0.13.6)树梢(1.4.8)巨魔(1.16.2)tzinfo(0.3.22)魔杖(0.2.1)守望者(0.10.7)webrat(0.7.1)我还在测试中添加了puts语句,以显示测试治具((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?"