在控制器中使用参数测试路由

testing route with parameter in controller

我正在使用 rspec 来测试我的应用程序 我有一条 id 像这样的路线

  match 'promotevuln/moderate/:id' => 'moderate#promotevuln'

这是我用来测试的代码

RSpec.describe ModerateController, :type => :controller do

  describe '#promotevuln' do
    context 'access controle' do
      before :each do
        @vuln=NewVulnerability.new(:description=>'description',:description_eng=>'description',:title=>'title',:title_eng=>'title_eng',:short_description=>'short',:short_description_eng=>'short')
      end

      it 'must be connected' do
        get :promotevuln,{:id=>@vuln.id}
        expect(response).to redirect_to(:controller => 'account', :action => 'login')
      end

但我无法通过此条件,它总是 returns 此错误消息

Failure/Error: get :promotevuln,{:id=>@vuln.id}
     ActionController::RoutingError:
       No route matches {:controller=>"moderate", :action=>"promotevuln"}

您正在实例化一个新的 NewVulnerability 但您并未将其持久保存到数据库中,因此其 idnil