我创建了一个模块,因此我可以快速创建用户,以用户身份登录,删除用户并注销用户。这是一个简化的例子:
module UserAuth
def sign_in(user)
cookies.permanent[:remember_token] = 'asda'
end
end
但是,如果我运行此规范:
describe 'UserAuth' do
include UserAuth
context 'signed up' do
let(:user_1) { FactoryGirl.build(:user) }
before { sign_up user_1 }
contex 'signed in' do
before { sign_in user_1 }
it {}
end
end
end
我收到此错误:
undefined method `permanent' for #<Rack::Test::CookieJar:#>
我觉得奇怪的是cookies
对象可用,但这种permanent
方法不是出于某种原因。我可以通过在UserAuth模块中包含另一个模块来解决此问题吗?如果是这样,这个模块的名称是什么?
答案 0 :(得分:0)
似乎RackTest CookieJar和Cookie类不提供这些方法在其MockSession中进行测试。我做的是模仿以这种方式设置cookie的方法,而是返回我自己的结果,或者使用RackTest的cookie方法来设置cookie。
注意:在这个例子中,我模拟了一个通过关注点设置cookie的方法。
before :each do
allow(MyConcern).to receive(cookie_method) { create(:cookie, :test) }
end
it 'tests cookie' do
cookie_method
expect {
put item_path({test_id: 2})
}.to change(Item, :test_id)
expect(response.cookies[:cookie_id]).to eq 'test'
end
这是另一篇涉及同一问题的SO文章,showing implementations。
另一种选择是使用RackTest的CookieJar方法,它提供了cookie创建的基础知识,以及其他一些选项。
it 'has a cookie' do
cookies[:remember_token] = 'my test'
post items_path
expect(response.cookies[:remember_token]).to eq 'my test'
end
您可以查看RackTest CookieJar/Cookie Source中的方法,这些方法非常简单,但对于API docs而言并非如此。
我希望能帮到某个人,我也希望别人能找到更好的解决方案!
答案 1 :(得分:-1)
我建议您按照Rails教程中定义的方法进行测试,如http://ruby.railstutorial.org/book/ruby-on-rails-tutorial#code-sign_in_helper所示。 CookieJar
中的Rack::Test
对象与ActionDispatch::Cookies
中Rails使用的对象不同。
参见相关的RailsTutorial: NoMethodError 'permanent' Rake::Test::CookieJar