"乔史密斯"与史密斯的乔史密斯不一样?

Bri*_*cks 0 tdd rspec ruby-on-rails

嘿,我第一次使用带轨道的TDD ......有趣的概念.绝对有用.也就是说,直到我来到这里.当我运行我的测试时,我得到:

1) User should build the full name correctly
    Failure/Error: @u1.fullname.to_s.should be("#{@attr[:firstname]} #{@attr[:lastname]}")
    expected Joe Smith, got "Joe Smith"
    # ./spec/models/user_spec.rb:35:in `block (2 levels) in <top (required)>'
    # /home/brian/.rvm/gems/ruby-1.9.2-p0@seniorproject/gems/rspec-core-2.0.0.beta.18/lib/rspec/monkey/spork/test_framework/rspec.rb:4:in `run_tests'
    # /home/brian/.rvm/gems/ruby-1.9.2-p0@seniorproject/gems/spork-0.8.4/lib/spork/run_strategy/forking.rb:13:in `block in run'
    # /home/brian/.rvm/gems/ruby-1.9.2-p0@seniorproject/gems/spork-0.8.4/lib/spork/forker.rb:21:in `block in initialize'
    # /home/brian/.rvm/gems/ruby-1.9.2-p0@seniorproject/gems/spork-0.8.4/lib/spork/forker.rb:18:in `fork'
    # /home/brian/.rvm/gems/ruby-1.9.2-p0@seniorproject/gems/spork-0.8.4/lib/spork/forker.rb:18:in `initialize'
    # /home/brian/.rvm/gems/ruby-1.9.2-p0@seniorproject/gems/spork-0.8.4/lib/spork/run_strategy/forking.rb:9:in `new'
    # /home/brian/.rvm/gems/ruby-1.9.2-p0@seniorproject/gems/spork-0.8.4/lib/spork/run_strategy/forking.rb:9:in `run'
    # /home/brian/.rvm/gems/ruby-1.9.2-p0@seniorproject/gems/spork-0.8.4/lib/spork/server.rb:47:in `run'
Run Code Online (Sandbox Code Playgroud)

测试的地方是:

it 'should build the full name correctly' do
  @u1.fullname.should be("#{@attr[:firstname]} #{@attr[:lastname]}")
end
Run Code Online (Sandbox Code Playgroud)

并且支持代码是:

def fullname
  "#{firstname} #{lastname}"
end
Run Code Online (Sandbox Code Playgroud)

显然这很有效,但引号是什么?我是否错过了令人头疼的事情?

the*_*eIV 6

你的问题来自于你使用be而不是eql.be期待你设置它的方式(文档).尝试编写您的规范

@u1.fullname.should eql("#{@attr[:firstname]} #{@attr[:lastname]}")
Run Code Online (Sandbox Code Playgroud)

eql的文档

另外,请注意eql文档中与它正下方的方法之间的区别equal.