Ruby on rails 如何存根狂欢';RSpec功能规范中的spree_current_用户方法?
我试图在RSpec3.0和Capybara2.3中存根Spree当前的用户方法,但没有用。我的目标是测试页面的内容,这些内容应该只在用户登录时出现。如何在功能规范中存根spree_current_user helper 功能规格Ruby on rails 如何存根狂欢';RSpec功能规范中的spree_current_用户方法?,ruby-on-rails,ruby-on-rails-4,rspec,spree,rspec3,Ruby On Rails,Ruby On Rails 4,Rspec,Spree,Rspec3,我试图在RSpec3.0和Capybara2.3中存根Spree当前的用户方法,但没有用。我的目标是测试页面的内容,这些内容应该只在用户登录时出现。如何在功能规范中存根spree_current_user helper 功能规格 #spec/features/spree_variants_spec.rb before(:each) do user = FactoryGirl.create(:user, first_name: "First name") helper.stub :spre
#spec/features/spree_variants_spec.rb
before(:each) do
user = FactoryGirl.create(:user, first_name: "First name")
helper.stub :spree_current_user => user # does not work
end
控制器
class Designers::SpreeVariantsController < ApplicationController
def create
...
@variant.attribute = spree_current_user.first_name #line 14
...
end
end
Failure/Error: click_button 'Create'
NoMethodError:
undefined method `first_name' for nil:NilClass
# ./app/controllers/designers/spree_variants_controller.rb:14:in `create'
在存根方法中,我还尝试了:
#2
Designers::SpreeVariantsController.stub :spree_current_user => instance_double(Spree.user_class, :has_spree_role? => true, :last_incomplete_spree_order => nil, :spree_api_key => 'fake', first_name: "First name")
#3
self.stub :spree_current_user => user # same error
#4
helper.stub :spree_current_user => user # does not recognize 'helper'
RSpec的请求和特性规范是为测试整个堆栈而设计的,而不是单个控制器,因此您无法获得控制器的实例。在该控制器的所有实例上存根该方法可能满足您的需要:
allow_any_instance_of(Designers::SpreeVariantsController).to receive(:spree_current_user).and_return(user)
但是,
- 根据RSpec文件。如果它在请求规范中对您有效,那么到目前为止还不错,但您可能正在走一条不推荐的道路。最新的编写规范的方法是使用整个堆栈
- 请求规范和功能规范用于测试整个堆栈,而不是单元测试。在他们身上打短棍有点可疑。您应该考虑编写一些请求或特性规范,用户通过该UI登录,并在控制器规范中测试细节,在那里您可以自由地存根您喜欢的任何东西。
访问某个路径;在“用户名”中填写:“用户名”;在“密码”中填写:“密码”
;点击“登录”按钮。这改变了我第二期的整个方法。谢谢,我会顺着那条路往下看。