Cancan, RSpec + Stubbing без параметри

Когато тествам моите контролери, имам този вид код:

describe "GET 'show'" do
  let!(:comment) { build_stubbed(:comment) }
  before(:each) { Project.stubs(:find).returns(project) } 

  it "render show template" do
    get 'show', id: project.id
    should render_template('show')
  end

  it "create a new comment" do
    Comment.expects(:new).returns(comment)
    get 'show', id: project.id
  end
end

Проблемът ми е следният: трябва да предам ID, за да използвам метода load_and_authorize_resource à cause de la ligne 139 dans ce code: https://github.com/ryanb/cancan/blob/2.0/lib/cancan/controller_resource.rb, които проверяват дали има идентификатор в параметрите.

Как да поправя това?

Благодаря!

Редактиране: С други думи: променливата @project не се създава от метода load_and_authorize_resource, защото няма идентификатор и може да провери дали има идентификатор, за да намери модел.


person Dougui    schedule 16.06.2012    source източник


Отговори (1)


Не съм съвсем сигурен, че разбирам какво питате, но можете да направите нещо като:

before(:each) { Project.stubs(:find).with(anything).returns(project)

За да изключи всяко извикване на Project.find, което приема един параметър, без значение какъв е този параметър. това помага ли

person sevenseacat    schedule 16.06.2012
comment
Не, съжалявам, проблемът е, че променливата @project не се създава от метода load_and_authorize_resource, както трябва да бъде. - person Dougui; 16.06.2012
comment
Вече имаш още по-малко смисъл. Каква @project променлива, не споменавате нищо в публикацията си? Нито декларирате променливата project някъде. - person sevenseacat; 16.06.2012
comment
Съжалявам, това е само извадка. codeprojectcode се декларира от let и променливата @project се използва в моите изгледи. - person Dougui; 16.06.2012
comment
Как може някой да ти отговори, без да получи съответната информация!? - person sevenseacat; 16.06.2012