我已经为基于Sinatra的API进行了一系列RSpec测试,并希望重构它们以使它们更简单并减少重复。
以下是路线测试的示例:
describe 'post /sections with empty data' do
before do
params = {
:site_id => site.id,
:page_id => page.id,
}
post '/sections', params, @session
end
specify { last_response.status.should == 200 }
specify { json_response['id'].should_not be_nil }
specify { json_response['type'].should == default_section_type }
end
每个测试将使用相同的基本URL,具有相同的会话数据,唯一的区别是参数以及响应应该是什么。每条路线至少有4次测试(GET,POST,PUT,DELETE),通常更多。
有没有办法让这些测试更易于管理?
答案 0 :(得分:3)
不使用metaprogramimng,您可以使用嵌套的describe
块来仅覆盖您想要的参数:
describe "/sessions" do
before do
send(http_method, "/sessions", params, @session)
end
describe "with POST" do
let(:http_method) { :post }
describe "and empty data" do
let(:params) do
{ :site_id => site.id, :page_id => page.id }
end
specify { last_response.status.should == 200 }
specify { json_response['id'].should_not be_nil }
specify { json_response['type'].should == default_section_type }
end
describe "with non-empty data" do
let(:params) do
# relevant params
end
end
end
describe "with GET" do
let(:http_method) { :get }
# ...
end
end
答案 1 :(得分:1)
不知道这是否有效,但它可以让你知道你能做什么
describe ' /sections with empty data' do
before(:all) do
@params = {
:site_id => site.id,
:page_id => page.id,
}
end
after(:each) do
specify { last_response.status.should == 200 }
specify { json_response['id'].should_not be_nil }
specify { json_response['type'].should == default_section_type }
end
[:get, :post, :put, :delete].each do |http_method|
it "works with #{http_method}" do
send(http_method) '/sections', @params, @session
end
end
end
再次阅读你的问题让我意识到这不是你实际要求的。如果它没有任何帮助告诉我,所以我删除它。