2014-10-02 4 views
2

Я пытаюсь использовать rspec3 в первый раз с новым приложением. Я определил две простые модели:Тестирование has_many с помощью toa-matchers с использованием rspec3

class Match < ActiveRecord::Base 
end 

class Article < ActiveRecord::Base 
    has_many :matches 
end 

Когда я получить доступ к этим моделям из консоли, я могу создавать ассоциации и хранить их в БД, как и ожидалось. Но, когда я пытаюсь запустить спецификацию, чтобы проверить это, кажется, не работает:

require 'spec_helper' 

describe Article do 
    it { is_expected.to have_many(:matches) } 
    # it { should have_many(:matches) } 
end 

Я попытался запустить как версию isexpected и версию теста should, но в обоих случаях я получаю следующее сообщение об ошибке:

> ./bin/rspec spec/models/article_spec.rb 
Warning: Running `gem pristine --all` to regenerate your installed gemspecs (and deleting then reinstalling your bundle if you use bundle --path) will improve the startup performance of Spring. 
F 

Failures: 

    1) Article should have many :matches 
    Failure/Error: it { is_expected.to have_many :matches } 
     expected #<Article:0x007fa14c276f38> to respond to `has_many?` 
    # ./spec/models/article_spec.rb:4:in `block (2 levels) in <top (required)>' 
    # -e:1:in `<main>' 

Finished in 0.09484 seconds (files took 0.63853 seconds to load) 
1 example, 1 failure 

Failed examples: 

rspec ./spec/models/article_spec.rb:4 # Article should have many :matches 

Randomized with seed 24636 

Вот соответствующие зависимости в Gemfile.lock:

rspec-core (3.0.4) 
    rspec-support (~> 3.0.0) 
rspec-expectations (3.0.4) 
    rspec-support (~> 3.0.0) 
rspec-mocks (3.0.4) 
    rspec-support (~> 3.0.0) 
rspec-rails (3.0.2) 
    rspec-core (~> 3.0.0) 
    rspec-expectations (~> 3.0.0) 
    rspec-mocks (~> 3.0.0) 
    rspec-support (~> 3.0.0) 
rspec-support (3.0.4) 
spring-commands-rspec (1.0.2) 
rspec-rails (~> 3.0.0) 
spring-commands-rspec 
... 
    shoulda-matchers (2.7.0) 
shoulda-matchers 

Похоже, что это должно быть довольно прямо вперед. Я делаю что-то неправильно, что заставляет меня получить эту ошибку?

ответ

2

Это связано с запуском binstub созданного при установке Spring:

./bin/rspec spec/models/article_spec.rb 

Видимо, это не работает совершенно так же, как работает исполняемый файл, установленный с помощью RSpec, который просто:

rspec spec/models/article_spec.rb 
+0

Интересная мысль, но, к счастью, я получаю ту же самую точную ошибку, когда я так делаю. Также стоит отметить, что с rspec2 мне никогда не приходилось определять тему явно, чтобы иметь возможность использовать сопоставления ассоциаций таким образом. –

+0

Можете ли вы разместить сообщение об ошибке? – zetetic

+0

Ой, вы правы, я забыл, как работают помощники-помощники. Я удалю этот ответ, но вы могли бы добавить версию Rails и RSpec? У меня есть код, работающий на Rails 4.1.5 и RSpec 3.1.5 – zetetic

0

Я не уверен, в чем причина, но у меня такая же проблема - с bin/rspec и rspec. Мне удалось заставить его работать на rspec, но не bin/rspec.

Мне нужно было добавить require 'shoulda/matchers' в файл спецификации, а также rails_helper.rb, чтобы пройти тест. Это прошло один раз, после чего я смог удалить его из файла spec и тест прошел. Странное и неудовлетворительное исправление.

 Смежные вопросы

  • Нет связанных вопросов^_^