ArgumentError - неверное количество аргументов (2 для 1) при тестировании метода show контроллера - PullRequest
1 голос
/ 19 марта 2019

Я пытаюсь написать тест для метода показа контроллера.

Ниже приведен метод:

def show
  if current_user
    goal= Goal.find_by_name(params[:id], :include => :projects, :conditions => ['projects.flag = true OR projects.user_id = ?', current_user.id])
  else
    goal= Goal.find_by_name(params[:id], :include => :projects, :conditions => ['projects.flag = true'])
  end

  @results = goal.projects if goal
end

Вот мой тест:

describe '#show' do
  before :each do
    @user = FactoryGirl.create(:user)
    @project= FactoryGirl.create(:project, user: @user, flag: 1)
    @goal= FactoryGirl.create(:goal, name: 'goal')
    @goal_association= FactoryGirl.create(:goal_association, goal_id: @goal.id, project_id: @project.id)
    controller.stub(:current_user).and_return(@user)
  end

  it 'search by goal' do
    get :show, id: @goal.name

    expect(response.status).to eq 302
  end
end

Этот тест возвращает следующую ошибку:

 Failure/Error: get :show, id: @goal.name
 ArgumentError:
   wrong number of arguments (2 for 1)

Ошибка указывает на goal= Goal.find_by_name(params[:id], :include => :projects, :conditions => ['projects.flag = true OR projects.user_id = ?', current_user.id]) строку.

Я не уверен, что с этим делать. Любые выводы относительно этого будут полезны.

1 Ответ

2 голосов
/ 19 марта 2019

Вы должны использовать обновленный синтаксис, потому что я предполагаю, что вы не используете эту действительно старую версию 2.3 Rails.Я предлагаю что-то вроде этого:

scope = if current_user
          Goal.joins(:projects).where('projects.flag = true OR projects.user_id = ?', current_user.id)
        else
          Goal.joins(:projects).where(projects: { flag: true })
        end
goal = scope.find_by(name: params[:id])
...