我正在尝试通过rspec在视图助手中设置局部变量。我的例行如下
def time_format(time) now = Time.now.in_time_zone(current_user.timezone) end
我的规格文件如下:
it 'return 12 hour format' do user = User.first assign(:current_user, user) expect(helper.time_format(900)).to eq('9:00 AM') end
规范失败并抛出错误未定义的局部变量或方法“ current_user”
“ current_user”驻留在application_controller中
您的current_user
方法在rspec测试中不可用。这就是为什么您遇到上述错误。
您可以current_user
在测试助手中实现方法,然后在测试中使用该方法,也可以current_user
像这样在规范测试中存根:
let(:user) { User.new } # RSpec version >= 3 syntax: before { allow(controller).to receive(:current_user) { user } } before { allow(view).to receive(:current_user) { user } } # RSpec version <= 2 syntax: before { controller.stub(:current_user) { user } } before { view.stub(:current_user) { user } }
这应该可以解决您的问题。
另外,如果您使用devise进行身份验证,那么我建议您看一下:如何:使用Rails 3和4(和RSpec)测试控制器。