3

这是我在 StackOverflow 上的第一个问题,请耐心等待...

当我使用清单 8.6中的 authentication_pages_spec.rb 时,我的测试通过了。然后我在 'spec/support/utilities.rb' 中定义了 sign_in 方法,并根据代码清单 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 的代码中找不到这是在哪里完成的。

非常感谢任何帮助。

4

3 回答 3

1

只需重新启动spork,它应该可以工作:)

于 2013-04-19T18:15:48.570 回答
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
于 2013-04-02T05:16:43.960 回答
0

Hartl在代码清单 9.6sign_in中几乎立即解释了这个助手

于 2012-11-16T05:36:41.913 回答