在寻求帮助之前,我花了很长时间处理这件事。我似乎不能让RSpec和巫术一起玩得很好。我已经阅读了与巫术的集成测试上的文档,可以正确地发布登录操作,但是我的测试仍然认为用户没有登录。
# spec/controllers/user_controller_spec
describe 'user access' do
let (:user) { create(:user) }
before :each do
login_user(user[:email], user[:password])
end
it "should log in the user" do
controller.should be_logged_in
end
end和我的login_user方法
# spec/support/sorcery_login
module Sorcery
module TestHelpers
module Rails
def login_user email, password
page.driver.post(sessions_path, { email: email , password: password, remember_me: false })
end
end
end
end当我在生成的页面上使用这些页面时,会话控制器会正确地处理它们。我尝试输出login_user方法的结果,它似乎正确地发布了数据。如何通过测试持久化这个登录用户?以前是这样的吗:每个街区都不适用于此吗?我只是不知道它可能在哪里出错,而且我对测试/RSpec非常陌生,所以我可能遗漏了一些显而易见的东西。我很感谢你的帮助。
下面是失败测试的输出:
1) UsersController user access should log in the user
Failure/Error: controller.should be_logged_in
expected logged_in? to return true, got false发布于 2014-01-01 22:00:19
我昨天刚经历过这个。这就是我所做的,如果有帮助的话。
魔法师提供了一个测试助手login_user,它依赖于可用的@controller对象。这在控制器规范中非常有用,但在集成测试中却不起作用。因此,集成测试的解决方法是编写另一个方法(如上面的方法),以模拟通过HTTP请求(实质上模拟提交表单)登录。
因此,我的第一个想法是,您应该尝试将您的方法重命名为login_user_post或其他不会与内置测试助手发生冲突的东西。
另一个潜在的问题是,在我看来,巫术助手认为您的用户密码是“秘密”。
这里有一个指向内置助手的链接,这样您就可以看到我在说什么:
祝你好运,除了这部分,我真的很喜欢这个宝石。这真的是完全解释了修补这样的帖子。下面是我使用的代码:
集成助手
module Sorcery
module TestHelpers
module Rails
def login_user_post(user, password)
page.driver.post(sessions_url, { username: user, password: password})
end
def logout_user_get
page.driver.get(logout_url)
end
end
end
endIntegration (用户需要登录才能进行操作)
before(:each) do
@user = create(:user)
login_user_post(@user.username, 'secret')
endController (普通login_user助手工作正常)
before(:each) do
@user = create(:user)
login_user
end注意,如果您有一个密码为“login_user”的@user对象,则不需要任何参数。
发布于 2014-05-02 15:51:21
你有没有尝试添加到spec/spec_helpers中。
RSpec.configure do |config|
# ...
config.include Sorcery::TestHelpers::Rails::Controller
end您需要包含Sorcery::TestHelpers::Rails::Controller,而不仅仅是Sorcery::TestHelpers::Rails。
然后,您将能够从任何控制器规范中获得login_user,如:
describe CategoriesController do
before do
@user = FactoryGirl::create(:user)
end
describe "GET 'index'" do
it "returns http success" do
login_user
get 'index'
expect(response).to be_success
end
end
end发布于 2014-01-01 22:03:26
您传递密码的方式可能是错误的。在这一点上可能是加密的。在提供的示例中,我首先尝试这样做:
describe 'user access' do
let (:user) { create(:user, password: 'secret') }
before :each do
login_user(user[:email], 'secret')
end
it "should log in the user" do
controller.should be_logged_in
end
endhttps://stackoverflow.com/questions/20873246
复制相似问题