Как я могу избежать появления здесь идентификатора hardcoding ?. Ниже приведен код, в котором я жестко кодирую идентификатор 22.

it "can find an Project that this user belongs to" do 
    project = Project.find( id: '22', authorization: @auth )        
    hashed_response = FactoryGirl.build(:project_json).marshal_dump.to_json
    expect(project.to_json).to eq(hashed_response);
end

Ниже приведен код полного класса.

require 'spec_helper'

describe Project do

  before(:all) do
    @project = FactoryGirl.create(:project, name: "123", description: "123");
    @user =  FactoryGirl.create(:user, email: "test@test.com", password: nil, code: nil);
    user = User.login(FactoryGirl.create(:user, email: "test@test.com", 
                               password: "123", code: 0));

      if user
        @auth = user['auth']        
      end
  end

  it "can create an Project" do    
    expect{Project.create(project: @acc, user: @user)}.to 
                      change{Project.all(authorization: @auth).size}.by (1);    
  end

  it "can find an Project that this user belongs to" do 
    project = Project.find( id: '22', authorization: @auth )        
    hashed_response = FactoryGirl.build(:project_json).marshal_dump.to_json
    expect(project.to_json).to eq(hashed_response);
  end

end

Я просматривал несколько руководств http://everydayrails.com/2012 /04/07/testing-series-rspec-controllers.html, но я не понимаю, как они проходят.

1
UnderTaker 10 Авг 2014 в 16:55

2 ответа

Лучший ответ

Если проект может принадлежать пользователю, вы можете сделать ...

project = Project.find_by( user_id: @user.id , authorization: @auth )

Если Пользователь может принадлежать к проекту, то вместо этого вы бы сделали ...

project = Project.find_by( id: @user.project_id, authorization: @auth )
2
SteveTurczyn 10 Авг 2014 в 13:08

А как предоставляется id проекта? С формой? Тогда это будет params [:id] или params [:project_id], но в тестах это будет @ project.id.

1
SteveTurczyn 10 Авг 2014 в 17:57