这是关于StackOverflow的第一个问题,请耐心等待......
当我在Listing 8.6中使用authentication_pages_spec.rb时,我的测试通过了。 然后我在'spec / support / utilities.rb'中定义sign_in方法,并根据Listing 9.5修改authentication_pages_spec.rb,并在运行时
$ bundle exec rspec spec/requests/authentication_pages_spec.rb -e "Authentication"
我得到了
1) Authentication signin with valid information
Failure/Error: before { sign_in user }
NoMethodError:
undefined method `sign_in' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_2::Nested_2:0x007fc585a87cd8>
# ./spec/requests/authentication_pages_spec.rb:31:in `block (4 levels) in <top (required)>'
对于“有效信息”下的所有六项测试。
似乎规范没有看到sign_in函数并且需要一些声明,无论如何我都无法在Github的Michael Hartl代码中找到它。
非常感谢任何帮助。
答案 0 :(得分:1)
重新启动 spork ,它应该可以工作:)
答案 1 :(得分:0)
Hartl在Listing 9.6
之后几乎立即解释sign_in
助手
答案 2 :(得分:0)
我遇到了完全相同的错误消息,基于结尾的微妙错误放置。在这里分享,以防其他人遇到相同的测试失败并正在寻求可能的解决方案。
我的错误在于我是如何创作的utilities.rb,它是:
include ApplicationHelper
RSpec::Matchers.define :have_error_message do |message|
match do |page|
page.should have_selector('div.alert.alert-error', text: 'Invalid')
end
def sign_in(user)
visit signin_path
fill_in "Email", with: user.email
fill_in "Password", with: user.password
click_button "Sign in"
# # Sign in when not using Capybara as well.
# cookies[:remember_token] = user.remember_token
end
end
end
阻止后需要的最终RSpec::Matchers
应该是这样的:
include ApplicationHelper
RSpec::Matchers.define :have_error_message do |message|
match do |page|
page.should have_selector('div.alert.alert-error', text: 'Invalid')
end
end
def sign_in(user)
visit signin_path
fill_in "Email", with: user.email
fill_in "Password", with: user.password
click_button "Sign in"
# # Sign in when not using Capybara as well.
# cookies[:remember_token] = user.remember_token
end