«Джо Смит» не такой же, как Джо Смит в rspec? - PullRequest
0 голосов
/ 10 сентября 2010

Эй, я впервые использую 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'

где тест:

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

и вспомогательный код:

def fullname
  "#{firstname} #{lastname}"
end

Так что, очевидно, это работает, но что с кавычками? Я что-то упустил до головокружительной очевидности?

1 Ответ

6 голосов
/ 10 сентября 2010

Ваша проблема связана с тем, что вы используете be вместо eql. be ожидает, что класс настроен так, как вы его настроили ( документация ). Попробуйте написать свою спецификацию как

@u1.fullname.should eql("#{@attr[:firstname]} #{@attr[:lastname]}")

Документация по eql

Также обратите внимание на разницу между eql и методом, расположенным непосредственно под ним, в документации equal.

...