我正在使用Rspec(2.13.0)请求规范测试移动站点的登录api。我有一个login_user方法,可以正确地将用户写入测试数据库,并在db中生成auth_令牌。
我不认为在“只是测试移动-登录-页面”的例子中,auth_token被正确地设置为会话值。我可以看到重定向发生在登录后,正确的auth_token是在重定向时发送(参见login_user方法中的注释)。
我的语法是否不正确(这是我第一次对类似的东西使用请求规范)?使用控制器规范还是使用机架测试更好?
线等回答
def login_user
@user = FactoryGirl.create :user
visit '/arc/signin'
fill_in 'Email', with: 'jxt@jxt.com'
fill_in 'Password', with: 'foobar'
click_button 'Log in'
# from test.log showing that auth_token is actually called
# Processing by UsersController#home as HTML
# ESC[1mESC[35mUser Load (0.4ms)ESC[0m SELECT `users`.* FROM `users` WHERE `users`.`auth_token` = 'pCnpG90vIw3qUAoXx3EBsA' LIMIT 1
#
end
it "just testing the mobile-login-page" do
login_user
get '/arc/v1/api/signup-mobile-test'
puts response.body
JSON.parse(response.body)[:auth_token] == (@user.auth_token)
end
控制器中:
def create_user_test
m={}
m[:status]="success"
m[:auth_token]=session[:auth_token]
render :json => m.to_json
end
这是输出:
Fri Apr 26$ rspec spec/requests/static_page_spec.rb
{"status":"success","auth_token":null}
.....
Finished in 0.80587 seconds
5 examples, 0 failures
您正在使用两个不同的测试工具,它们不共享会话状态。
您正在使用的访问
、fill_in
和click_button
方法通过水豚和rack-test:http://rubydoc.info/gems/capybara/Capybara/Session#visit-instance_method
用于发出API请求的get
方法来自Rails的内置集成测试:http://api.rubyonrails.org/classes/ActionDispatch/Integration/RequestHelpers.html#method-i-get
如果在第二个示例中使用access
而不是get
,则从login_user
创建的会话将是可见的。
请注意,通常不建议直接使用capybara测试API,因为capybara的设计目的是通过用户界面与站点交互,就像实际用户那样。我假设您正在测试一个富UI,其背后有一个JavaScript API。
如果是这样,我会结合使用两种测试方法:
从WebSocketendpoint,我尝试调用单例服务。但是我无法使用来自WebSocket的请求或会话范围。 谢谢你的帮助!
问题内容: 我想知道是否有一种简单的方法可以从Jade模板中访问Express.js的req或会话变量,而无需通过常规响应传递它。 还是这是唯一的方法? 问题答案: 您需要创建一个Express才能使用。 然后在模板内部,您可以使用或其他任何东西。 注意:Express 3中不推荐使用dynamicHelpers
问题内容: 如果我在Django中设置会话变量,例如: 有什么方法可以从模板中访问它,还是必须从视图中检索它,然后将其传递给模板? 询问是因为我想在模板中访问大约10个小会话变量,然后将所有10个从视图传递到模板可能会有些混乱。 (我必须使用会话变量,因为它是HttpResponseRedirect,但是出于我的目的,将变量存储在数据库中是过大的。) 那么-有什么方法可以直接在模板中获取会话变量?
我可以从控制器规格访问当前用户,没有问题。从Rspec内部。功能规范,我无法使当前用户可用。 我需要当前用户的原因是,我正在测试发送邀请功能。我导航到发送邀请的页面,填写邀请[to_user]字段,然后单击“发送邀请”。我想确保页面上显示正确的flash消息。但是,我正在通过单击“发送邀请”触发的控制器操作中将发送者\u id设置为当前\u用户id,我需要在此处定义当前\u用户。 我设置了支持/控
我已经对Spring bean使用的注释进行了注释。我通过spring DI成功地创建了相同的bean,并设置了对象注入的范围。现在,我想用Struts2和di做同样的事情。为此,我在中创建了bean定义 和简单的操作来创建bean并将其注入到我的操作中 在JSP中,我在会话bean上使用简单的迭代器 null
问题内容: 我在Sun的“ Core Servlets and JavaServer Pages vol 2”中看到了带有会话计数器的示例。 计数器仅仅是建立在和递增/递减会话数与/ : 侦听器在上下文中注册自身,因此可以访问它并获取计数器值。 没有同步块。 安全,不是吗? 可以缓存在CPU寄存器中,并且对于使用? 问题答案: Servlet 3.0的规范规定(第11.5节): 侦听器实例和线程