Ruby on rails 为什么RSpec会“给予”;尝试解锁未锁定的互斥锁";尝试单击按钮时出错?
我正在尝试测试登录时应该/不应该看到的链接,但RSpec抛出以下错误:Ruby on rails 为什么RSpec会“给予”;尝试解锁未锁定的互斥锁";尝试单击按钮时出错?,ruby-on-rails,rspec,capybara,Ruby On Rails,Rspec,Capybara,我正在尝试测试登录时应该/不应该看到的链接,但RSpec抛出以下错误: Failure/Error: before { sign_in user } ThreadError: Attempt to unlock a mutex which is not locked # (eval):2:in `click_button' # ./spec/support/utilities.rb:5:in `sign_in' # ./spec/views/header_spec.rb:19:i
Failure/Error: before { sign_in user }
ThreadError:
Attempt to unlock a mutex which is not locked
# (eval):2:in `click_button'
# ./spec/support/utilities.rb:5:in `sign_in'
# ./spec/views/header_spec.rb:19:in `block (3 levels) in <top (required)>'
Nokogiri::CSS::SyntaxError:
unexpected '!' after '[#<Nokogiri::CSS::Node:0x00000003645778 @type=:DESCENDANT_SELECTOR, @value=[#<Nokogiri::CSS::Node:0x000000036464e8 @type=:ELEMENT_NAME, @value=["Log"]>, #<Nokogiri::CSS::Node:0x000000036458b8 @type=:DESCENDANT_SELECTOR, @value=[#<Nokogiri::CSS::Node:0x00000003645f98 @type=:ELEMENT_NAME, @value=["me"]>, #<Nokogiri::CSS::Node:0x000000036459f8 @type=:ELEMENT_NAME, @value=["in"]>]>]>]'
# (eval):3:in `_racc_do_parse_c'
# (eval):3:in `do_parse'
# (eval):2:in `find'
# ./spec/support/utilities.rb:5:in `sign_in'
# ./spec/views/header_spec.rb:19:in `block (3 levels) in <top (required)>'
以及我的登录功能:
def sign_in(user)
click_link "Log in"
fill_in "username", with: user.username
fill_in "password", with: user.password
click_button "Log me in!"
cookies[:remember_token] = user.remember_token
end
我试着换衣服
click_button "Log me in!"
与
并导致以下错误:
Failure/Error: before { sign_in user }
ThreadError:
Attempt to unlock a mutex which is not locked
# (eval):2:in `click_button'
# ./spec/support/utilities.rb:5:in `sign_in'
# ./spec/views/header_spec.rb:19:in `block (3 levels) in <top (required)>'
Nokogiri::CSS::SyntaxError:
unexpected '!' after '[#<Nokogiri::CSS::Node:0x00000003645778 @type=:DESCENDANT_SELECTOR, @value=[#<Nokogiri::CSS::Node:0x000000036464e8 @type=:ELEMENT_NAME, @value=["Log"]>, #<Nokogiri::CSS::Node:0x000000036458b8 @type=:DESCENDANT_SELECTOR, @value=[#<Nokogiri::CSS::Node:0x00000003645f98 @type=:ELEMENT_NAME, @value=["me"]>, #<Nokogiri::CSS::Node:0x000000036459f8 @type=:ELEMENT_NAME, @value=["in"]>]>]>]'
# (eval):3:in `_racc_do_parse_c'
# (eval):3:in `do_parse'
# (eval):2:in `find'
# ./spec/support/utilities.rb:5:in `sign_in'
# ./spec/views/header_spec.rb:19:in `block (3 levels) in <top (required)>'
Nokogiri::CSS::SyntaxError:
意外在“[#]之后
#(评估):3:在“racc\u do\u parse\u c”中
#(eval):3:在“do_parse”中
#(评估):2:在“查找”中
#./spec/support/utilities.rb:5:in'sign\u in'
#./spec/views/header_spec.rb:19:in'block(3层)in'
然后我尝试用“登录我”替换我的按钮文本,没有感叹号,
水豚抛出ElementNotFound错误:
Failure/Error: before { sign_in user }
Capybara::ElementNotFound:
Unable to find css "Log me in"
# (eval):2:in `find'
# ./spec/support/utilities.rb:5:in `sign_in'
# ./spec/views/header_spec.rb:19:in `block (3 levels) in <top (required)>'
失败/错误:在{sign_in user}之前
Capybara::ElementNotFound:
找不到css“登录我”
#(评估):2:在“查找”中
#./spec/support/utilities.rb:5:in'sign\u in'
#./spec/views/header_spec.rb:19:in'block(3层)in'
总的来说,我对RSpec和Rails还是相当陌生的,但到目前为止,我已经能够很好地找到自己的方法。这件事把我彻底难住了。因此,在昨晚胡闹了一番之后,我终于找到了解决办法,并立即开始面对桌面。我正在将SessionHelper与我的SessionController一起使用,并且我在类外使用了include语句:
include SessionsHelper
class SessionsController < ApplicationController
def new
end
...
...
...
end
class SessionsController < ApplicationController
include SessionsHelper
def new
end
...
...
...
end
include sessionhelp
类sessioncontroller
通过将include语句移动到类中:
include SessionsHelper
class SessionsController < ApplicationController
def new
end
...
...
...
end
class SessionsController < ApplicationController
include SessionsHelper
def new
end
...
...
...
end
class sessioncontroller
我所有的考试都开始通过了。虽然我的测试在类块之外的include语句中失败,但实际的功能似乎运行良好。我可以登录/注销,cookie存储了正确的信息,并且我在服务器控制台中没有看到任何错误。如果您注释掉
登录中的最后一行,是否仍然会发生错误?@tanzeebkhali注释掉cookie[:记住\u token]=用户。记住_token
仍会抛出相同的错误。我尝试将单击按钮“登录!”
替换为查找(:按钮,“登录!”)
,结果导致与结尾感叹号相关的非常长的Nokogiri错误。将按钮文本替换为不带感叹号的“Log me in”(登录我),会导致Capybara错误无法找到css“Log me in”
。如果使用click_on而不是click_按钮,则会出现相同的错误。您的规范(我假设spec/views/header_spec.rb)是否有原因是spec/requests目录下的视图规范,而不是集成规范?根据,视图规范“单独渲染视图模板”,这与调用单击按钮和填充按钮时的操作不一样。不确定它是否会起作用,但也许可以尝试将您的规范或文件本身移动到规范/请求中。@PaulFioravanti我今天下午在开始工作之前确实尝试过,但没有成功。此外,将单击按钮更改为单击按钮将导致相同的错误。如果值得一提的话,我还有另外一个测试用户注册页面的规范,click\u按钮
功能在其中运行良好。我的注册页面为
使用了一个表单,而我的登录表单是一个简单的表单标签
,这会有什么不同吗?