测试从Rails框架中隔离的Ruby方法==大大缩短测试时间。
如何正确地分离Rails 4控制器?
目前,这是我的rspec错误:
NameError:
undefined local variable or method `response'
这是我在controller_spec测试文件中解耦和模拟ActionController的方法。这是我研究什么适用于Rails 3并解决我的实验中出现的错误消息的一个方法。我不相信这是有效的,因为我要么没有设置ActionController需要的一些属性,要么我无意中关闭了一些东西。似乎Rails 4为控制器增加了一些复杂性。
APP_ROOT = File.expand_path(File.join(File.dirname__FILE__), "..", "..", ".."))
$: << File.join(APP_ROOT, "app/controllers")
module ActionController
class Base
class << self
attr_reader :before_filters
attr_reader :skipped_before_filters
end
def self.before_filter(*args)
@before_filters ||= []
@before_filters << args
end
def self.skip_before_filter(*args)
@skipped_before_filters ||= []
@skipped_before_filters << args
end
def self.allow_forgery_protection=(val); end
def self.allow_forgery_protection; end
def self.protect_from_forgery(*args); end
def self.after_filter(*args); end
def request=(val); end
def request; end
def params=(val); end
def redirect_to(*args); end
def render_template(*args); end
def _compute_redirect_to_location(*args); end
end
end
这些是我在开始此实验之前通过的规范测试:
describe "GET #home" do
subject(:action) {get :home}
it "is successful" do
expect(action).to be_success
end
it "returns HTTP 200 status" do
expect(action.status).to eq(200)
end
it "renders the home template" do
expect(action).to render_template("home")
end
end
我的控制器操作只会渲染主视图并按预期工作:
def home
end
谢谢。