使用 Railscast 示例,我为我的演示者编写了一个规范,其中包含方法ActionView::TestCase::Behavior
并将其传递view
给演示者。
spec/spec_helper.rb
:
...
config.include ActionView::TestCase::Behavior, :example_group => {:file_path => %r{spec/presenters}}
...
spec/presenters/order_presenter_spec.rb
:
require 'spec_helper'
describe OrderPresenter do
describe "#subtotal" do
subject { OrderPresenter.new(order, view).subtotal }
let(:order) { stub(:order, working_subtotal: 4500) }
it "renders the subtotal table row" do
should == "<tr><th>SUBTOTAL</th><td>$45.00</td></tr>"
end
end
end
但是,这给了我两个错误。第一个是
/Users/shevaun/.rvm/gems/ruby-1.9.3-p392/gems/actionpack-3.2.13/lib/action_controller/test_case.rb:12:in `block in <module:TemplateAssertions>': undefined method `setup' for #<Class:0x007fe2343b2f40> (NoMethodError)
所以我ActiveSupport::Testing::SetupAndTeardown
以与ActionView::TestCase::Behavior
.
修复它给了我错误:
NoMethodError:
undefined method `view_context' for nil:NilClass
打电话时view
。这是由@controller
内部的实例变量引起ActionView::TestCase
的nil
。
我正在使用 Rails 3.2.13 和 rspec-rails 2.13.0 并且有另一个使用相同版本的应用程序。
我唯一能想到的可能会有所不同的是,这个应用程序正在使用 MongoDB,所以 ActiveRecord 应用程序可能包含一些 @controller
免费设置的东西?
我有一个使演示者规范通过的解决方法,但我想知道@controller
通常如何实例化,以及是否有更优雅的方式来为 MongoDB 项目执行此操作(如果它是 ActiveRecord 正在发挥作用)。