Как определить новую область в контроллере - PullRequest
0 голосов
/ 06 сентября 2010

Как мне указать эту вложенную сборку:

#projects_controller.rb
def new
  @account.projects.build
end

Пока у меня есть что-то вроде этого:

#projects_controller_spec.rb
describe ProectssController do
  describe "GET new" do
    let(:account) { mock_model(Account) }
    let(:project) { mock_model(Project).as_null_object }

    before do
      Account.stub(:find_by_subdomain!).and_return(account)
      #Project.should_receive(:build).with(:account_id => account.id).and_return(project)
    end

    it "assigns @project" do
      get :new
      assigns[:project].should eq(project)
    end
  end
end

Не знаю, как мне это определить ...

Ответы [ 2 ]

0 голосов
/ 18 декабря 2010

Назначение отсутствует в ProjectsController # new.Должно быть:

def new
  # ...
  @project = @account.projects.build
  # ...
end

Тогда вы можете получить заглушку, возвращая двойное число, как и планировали:

0 голосов
/ 06 сентября 2010

В общем, я рекомендую заглушки и насмешки как можно меньше.Я рекомендую использовать что-то вроде Factory Girl для создания реальных объектов базы данных для взаимодействия с тестами.Это означает, что Account и Project будут реальными классами ActiveRecord, а затем @account будет реальным объектом AR с ассоциацией projects, которая работает так же, как и в производстве.Это важно, поскольку в противном случае вы просто тестируете ту реализацию, которую написали, и фактически не проверяли, что ваш код функционирует, когда он фактически использует ActiveRecord.

Как только вы сможете это сделать, я бы порекомендовалпросто проверяя вещи, которые вас интересуют, для модели проекта, например:

assigns[:project].should be_instance_of(Project)
assigns[:project].should be_new_record
assigns[:project].account.should == logged_in_user

Надеюсь, это поможет!

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