Rspec - response_to "запись пользователя" действительна, несмотря на то, что пользователь недействителен (has_many / own_to association) - PullRequest
1 голос
/ 19 марта 2011

Я не понимаю что-то довольно простое с ассоциацией тестирования (has_many / own_to) с rspec.

Ассоциации в моделях:

user has_many :posts
post belongs_to :user 

Я установил пользователя без атрибутов и проверил, должен ли пост отвечать пользователю. Тест действителен, однако пользователь недействителен (и не создан).

Я знаю, что response_to проверяет только наличие сообщения через ассоциацию, но как оно может существовать без действительного пользователя? Может кто-нибудь объяснить мне, почему? Спасибо!

user_spec.rb

require 'spec_helper'

describe User do

  describe "post associations"

    before(:each) do
      @user = User.create(@attr) #no attribute is set
    end

    it "should have a post attribute" do
      @user.should respond_to(:posts)
    end

  end

end

1 Ответ

2 голосов
/ 19 марта 2011

Пользователь отвечает на сообщения, он просто возвращает пустой массив. Попробуйте это в консоли rails:

> @user = User.new
> @user.posts
=> []

Лучшим тестом может быть:

@user.posts.should be_empty

Честное тестирование отношений на рельсах обычно не рекомендуется, так как вы сами тестируете рельсы, которые уже очень хорошо протестированы.

Однако, musta предоставляет несколько хороших сопоставителей, которые работают в rspec для проверки правильности установки отношений:

it {should have_many(:posts)}

Проверьте это на github: https://github.com/thoughtbot/shoulda

...