Ruby on Rails教程3.2作者:Michael Hartl第9章authentication_pages_spec.rb没有在utilities.rb中看到sign_in方法

时间:2012-11-15 15:00:09

标签: railstutorial.org

这是关于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代码中找到它。

非常感谢任何帮助。

3 个答案:

答案 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