Rspec错误无法从回溯中找到匹配的行

时间:2013-03-30 23:42:14

标签: rspec rspec-rails

我已经为我的用户模型编写了一组23个测试,并且所有测试都失败并出现以下错误:

Failure/Error: Unable to find matching line from backtrace 
ArgumentError: 
  block not supplied

我已经尝试过使用不同版本的水豚,rspec-rails和咆哮,但是说实话,我真的不知道我在这里做什么,并且不太了解错误。我非常感谢任何能指出我正确方向的人的帮助。

以下是我的user_spec.rb文件

中的示例
require 'spec_helper'

describe User do
  before @user = User.new(name: 'example', password: 'foobar', password_confirmation: 'foobar',
                        email: 'example@example.com', description: 'Lorem ipsum dolor...')

  subject { @user }

  it { should respond_to(:name) }
  it { should respond_to(:email) }
  it { should respond_to(:password) }
  it { should respond_to(:password_confirmation) }
  it { should respond_to(:password_digest) }
  it { should respond_to(:description) }
  it { should respond_to(:admin) }
  it { should respond_to(:remember_token) }

  describe "when name is not present" do
    before { @user.name = " " }
    it { should_not be_valid }
  end
  .
  .
  .
end

以下是我Gemfile的相关部分:

group :development do
  gem 'rspec-rails', '2.11.0'
  gem 'guard'
  gem 'guard-spork', :github => 'guard/guard-spork'
  gem 'guard-rspec'
  gem 'spork'
  gem 'sqlite3'
end

group :test do
  gem 'capybara', '1.1.2'
  gem 'rb-fsevent', '0.9.1', :require => false
  gem 'growl', '1.0.3'
  gem 'factory_girl_rails', '4.1.0'
end

感谢阅读!

2 个答案:

答案 0 :(得分:5)

这里的问题是你没有为before方法指定一个块:

before @user = User.new(name: 'example', password: 'foobar', password_confirmation: 'foobar',
                    email: 'example@example.com', description: 'Lorem ipsum dolor...')

应该是:

before do
  @user = User.new(name: 'example', password: 'foobar', password_confirmation: 'foobar',
                    email: 'example@example.com', description: 'Lorem ipsum dolor...')
end

不可否认,错误信息在这里不是很有帮助。 Ruby解释器不能总是精确地指出程序中引发错误的确切行,例如当存在堆栈级别深度错误时,“但我不确定为什么在这种情况下不能。”

答案 1 :(得分:1)

我遇到了这个问题,并且能够找到我的答案here。虽然在这种情况下不适用,但我的问题是Rails 3不允许符号命名描述块,即你必须有describe 'create'而不是describe :create

相关问题