我已经为我的用户模型编写了一组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
感谢阅读!
答案 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
。