【发布时间】:2018-10-01 17:01:49
【问题描述】:
我花了几个小时试图让我的 rspec 测试工作。结果,我没有得到想要以某种方式优化的真正 DRY 测试。
它们如下所示:
describe ExtApi::BaseController do
let!(:app) { create(:api_application) }
let!(:token) { app.token }
controller do
def resp
render json: {foo: 'bar'}
end
def error
raise StandardError 'baz'
end
end
describe '#authenticate' do
context 'when is successfull' do
it 'renders bar' do
routes.draw { get '/foo' => 'ext_api/base#resp' }
get :resp, access_token: token
expect ...
end
end
context 'when token is invalid' do
before do
app.destroy
end
it 'renders error' do
routes.draw { get '/foo' => 'ext_api/base#resp' }
get :resp, access_token: token
expect ...
end
it do
routes.draw { get '/foo' => 'ext_api/base#resp' }
get :resp, access_token: token
is_expected.to respond_with 401
end
end
context 'when token is not presented' do
it 'renders error' do
routes.draw { get '/foo' => 'ext_api/base#resp' }
get :resp
expect ...
end
it do
routes.draw { get '/foo' => 'ext_api/base#resp' }
get :resp
is_expected.to respond_with 401
end
end
end
我必须在每个it 块中重复routes.draw(而不是在before),否则,它会破坏所有路由,并且在这些之后运行的所有测试中,我得到RoutingError。
那么,我想知道有没有比我做得更好的方法?
(我使用rails 4.2和rspec 3.4)
【问题讨论】:
标签: ruby-on-rails-4 rspec routing rspec-rails