gpt4 book ai didi

javascript - 打开 js 时破坏功能规范 : true - Capybara - Rails

转载 作者:太空宇宙 更新时间:2023-11-04 16:24:24 25 4
gpt4 key购买 nike

我有一些适合我的应用程序的 capybara 功能规范。现在我有一个正在尝试测试的模式。该模式使用 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 。

我真的不知道出了什么问题。希望你们中的一些人更熟悉 capybara 和 javascript 测试。让我知道你的想法

最佳答案

从你似乎正在使用的 poltergeist 来看 - https://github.com/teampoltergeist/poltergeist/blob/28cb0d6fd427424acaddc4800514c13efedcb199/lib/capybara/poltergeist/browser.rb传递的 cookie 需要是一个哈希值 - 实际上你不应该在 page.driver.browser 上调用任何内容(99% 的情况下这意味着你正在做一些不应该做的事情)。您可以在 page.driver 上调用 set_cookie - https://github.com/teampoltergeist/poltergeist/blob/master/lib/capybara/poltergeist/driver.rb - 需要 (name, value, options = {}) 所以

page.driver.set_cookie("account_id", account_id)

这将解决您当前遇到的问题。然而,调用 page.driver 上的某些内容意味着您可能在 50% 的时间内做错了事情。您确实不应该手动设置 cookie 来伪造登录,而是应该实际登录或将您正在使用的任何身份验证库设置为测试模式并这样做(例如使用 devise - https://github.com/plataformatec/devise/wiki/How-To:-Test-with-Capybara )

此外,您的测试存在许多可能导致测试不稳定的问题。

  1. visit 不保证在返回之前等待页面完成加载,因此紧随其后的任何不基于屏幕上可见项目的断言都可能是不稳定的。
  2. 在 JS 支持驱动程序中调用 current_account (假设这是一个应用程序方法),这意味着单独的线程和您的测试无法访问 Controller 数据,实际上并不能很好地工作 - 相反,只需检查上的可见项目页面。
  3. click_on 不会等待其触发的操作完成,因此立即检查路径将非常不稳定 - 而是使用 has_current_path 匹配器,它将重试

    expect(page).to have_current_path(snitches_path)

关于javascript - 打开 js 时破坏功能规范 : true - Capybara - Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40353163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com