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

mat*_*att 4 rspec rspec-rails

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

Failure/Error: Unable to find matching line from backtrace 
ArgumentError: 
  block not supplied
Run Code Online (Sandbox Code Playgroud)

我曾尝试搞乱不同版本的水豚,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
Run Code Online (Sandbox Code Playgroud)

以下是我的相关部分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
Run Code Online (Sandbox Code Playgroud)

谢谢阅读!

Ste*_*eve 5

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

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

应该:

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

不可否认,错误消息在这里不是很有帮助.Ruby解释器不能总是精确定位在引发错误的程序,例如精确线时,有一个堆栈级深度错误",但我不知道为什么它不能在这种情况下.