Ошибка RSpec для действия уничтожения - нет совпадений маршрутов - PullRequest
0 голосов
/ 13 января 2019

Я пытаюсь написать тест rspec для моего действия уничтожения моего user_stocks_controller, но я получаю ошибку:

UserStocksController DELETE #destroy удаляет акции Отказ / Ошибка: удалить: уничтожить, параметры: {id: user_stock.id}

ActionController :: UrlGenerationError: Нет подходящих маршрутов {: action => "destroy",: controller => "user_stocks",: id => nil}

Я прочитал, что проблема существует, потому что я не дал идентификатор для акций. Я пытался изменить это по-другому, но мои идеи были неверны.

Вот моя спецификация:

let(:user) { User.new(email: 'test@example.com', password: 'password') }

  before do
    sign_in(user)
  end

 describe 'DELETE #destroy' do
    let(:stock) { Stock.new_from_lookup('GS') }
    let(:user_stock) { UserStock.create(user: user.id, stock: stock) }

    it 'deletes stock' do
      expect do
        delete :destroy, params: { id: user_stock.id }
      end.to change(UserStock, :count).by(-1)
      expect(response).to have_http_status(redirect)
      expect(flash[:notice]).to eq 'Stock successfully removed'
    end
  end

Уничтожить метод в user_stocks_controller:

  def destroy
    stock = Stock.find(params[:id])
    @user_stock = UserStock.where(user_id: current_user.id, stock_id: stock.id).first
    @user_stock.destroy!
    flash[:notice] = 'Stock successfully removed'
    redirect_to my_portfolio_path
  end

Почему мои маршруты не определяются, даже если для него установлено id?

1 Ответ

0 голосов
/ 13 января 2019

Какую версию рельсов вы используете? В rspec-rails github repo есть примеры того, как делать уничтожение, в зависимости от версии rails <5 или rails> 5, синтаксис отличается.

Если у вас рельсы версии <5, попробуйте </p>

delete :destroy, {id: user_stock.id}

Другим решением будет попытка использовать путь удаления, основанный на ваших маршрутах, как показано ниже

delete "/user_stocks/#{user_stock.id}"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...