2013-03-30 99 views
4

匹配的行我已经写了一组23个测试我的用户模型和所有的人都用下面的错误而失败:Rspec的错误不能找到回溯

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: '[email protected]', 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 

感谢您的阅读!

回答

5

这里的问题是,你还没有指定一个块的方法之前:

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

应该是:

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

不可否认的错误信息是不是非常有帮助这里。 Ruby解释器不能总是精确定位程序中出现错误的确切行,例如,当有一个堆栈级别深度错误',但我不知道为什么它不能在这种情况下。

+0

非常感谢!那个愚蠢的小语法错误让我发疯。 – mattmattmatt

1

我有这个问题,并能找到我的答案here。尽管在这种情况下不适用,但我的问题是Rails 3不允许使用符号来描述块,即您必须有describe 'create'而不是describe :create