我的应用程序有一些功能规格与水豚。现在我有一个我想要测试的模态。模态使用Javascript。但是当我运行我的规格时。我得到这个非常奇怪的错误。在这里。
Failure/Error: page.driver.browser.set_cookie("account_id=#{account_id}")
TypeError:
no implicit conversion of Symbol into Integer
# /Users/intern/.rvm/gems/ruby-2.3.1/gems/poltergeist-1.11.0/lib/capybara/poltergeist/browser.rb:313:in `[]'
# /Users/intern/.rvm/gems/ruby-2.3.1/gems/poltergeist-1.11.0/lib/capybara/poltergeist/browser.rb:313:in `set_cookie'
# ./spec/support/_request_macros.rb:20:in `set_current_account'
# ./spec/features/manage_accounts_spec.rb:101:in `block (3 levels) in <top (required)>'
# /Users/intern/.rvm/gems/ruby-2.3.1/gems/rspec-wait-0.0.9/lib/rspec/wait.rb:46:in `block (2 levels) in <top (required)>'
这是破解的文件
def set_current_account(account_id)
page.driver.browser.set_cookie("account_id=#{account_id}")
end
这是我的测试
it "redirects to the previous account if a user accesses an account they are not on" do
third_account = create(:account, name: "Third Account", users: [user])
set_current_account(third_account.id)
visit root_path
expect(current_account).to eq(third_account.id)
user.accounts.delete(account1)
click_on "Test Account"
expect(current_path).to eq(snitches_path)
expect(page).to have_content("You don't have access to that account!")
expect(current_account).to eq(third_account.id)
expect(page).to have_content("Third Account")
end
我在上面的上下文中有js:true。
我真的不知道出了什么问题。希望你们中的一些人更熟悉水豚和javascript测试。让我知道你的想法
答案 0 :(得分:1)
通过查看你似乎正在使用的恶作剧者https://github.com/teampoltergeist/poltergeist/blob/28cb0d6fd427424acaddc4800514c13efedcb199/lib/capybara/poltergeist/browser.rb,传递的cookie需要是一个哈希 - 而且你不应该在page.driver.browser上调用任何东西(99%的时间意味着你做了一些你不应该做的事情。您可以在set_cookie
- https://github.com/teampoltergeist/poltergeist/blob/master/lib/capybara/poltergeist/driver.rb上致电page.driver
- 其中包含(名称,值,选项= {})
page.driver.set_cookie("account_id", account_id)
将解决您目前遇到的问题。但是,在page.driver上调用一些东西意味着你可能在50%的时间里做错了。你真的不应该手动设置cookie来伪造登录,而应该是实际登录或设置你正在使用的任何auth库进入测试模式并以这种方式进行(例如,如果使用devise - {{ 3}})
此外,您的测试有许多问题,可能会导致测试不稳定。
visit
无法保证在返回之前等待页面完成加载,因此任何基于屏幕上的可见项目之后的断言都可能是不稳定的。 click_on
不会等待它触发的操作完成,所以立即检查后面的路径是非常片状的 - 而是使用将重试的has_current_path匹配器
期望(页面).to have_current_path(snitches_path)