如何在Cucumber Scenario Outline中使用Rails路径助手
解决Cucumber Rails中Scenario Outline调用路径助手的问题
现在的问题是,步骤定义里直接把传入的root_path字符串传给visit方法,导致程序尝试访问/root_path这个不存在的路径,而不是调用Rails内置的路径助手生成正确的根路径。
给你两种实用的解决办法:
直接调用路径助手(简单快捷)
修改步骤定义,用send方法把字符串转为方法调用:Given (/^I am on the ([^"]*)$/) do |path| visit send(path) endsend(path)会自动调用当前上下文里对应名称的路径助手方法,比如传入root_path就会执行root_path(),返回正确的根路径/。安全可控版(推荐用于严谨的测试环境)
如果担心传入未知方法名带来风险,可以先维护一个允许调用的路径助手列表,检查通过后再执行:# 按需添加你项目里用到的路径助手 ALLOWED_PATH_HELPERS = %w[root_path products_path user_path] Given (/^I am on the ([^"]*)$/) do |path| if ALLOWED_PATH_HELPERS.include?(path) visit send(path) else raise "禁止调用未授权的路径助手:#{path}" end end这种方式能避免误调用或恶意调用其他方法,测试更安全。
另外还有一种不推荐的方式:直接在Examples里硬编码路径(比如把root_path换成/),但这种方式在路由规则变化时需要手动更新所有用例,维护成本高,不如调用路径助手灵活。
内容的提问来源于stack exchange,提问作者cinameng
相关产品推荐
相关产品推荐

