我正在使用Ruby on Rails 3.1.0和rspec-rails 2
gem。由于我必须测试同一个控制器操作的HTML和JavaScript请求,并且因为有时这些请求通过呈现不同的视图文件或以不同的方式执行 ,我想重构一些代码
一般,在我的控制器文件中我有:
def create
...
respond_to
format.html
format.js
end
end
目前,为了测试JS和HTML请求\响应,在我的spec文件中,我有两个不同的示例(每个案例都有一个例子):
context "POST create" do
let(:user) { User.new }
it "should correctly respond to a JS request" do
xhr :post, :create
...
session[:user].should be_nil
flash[:notice].should be_nil
end
it "should correctly respond to a HTML request" do
post :create
...
session[:user].should be_nil
flash[:notice].should be_nil
end
end
我应该如何重构上述代码?
答案 0 :(得分:2)
您可以使用shared_examples_for
。
context "POST create" do
let(:user) { User.new }
shared_examples_for "a succesfull request" do
it("does not set the user") { session[:user].should be_nil }
it("does not set the flash") { flash[:notice].should be_nil }
end
context "with a js request" do
before(:each) do
xhr :post, :create
end
it_should_behave_like "a succesfull request"
end
context "with a HTML request" do
before(:each) do
post :create
end
it_should_behave_like "a succesfull request"
end
end
希望这有帮助。