Количество таблиц не увеличивается после того, как save возвращает true для теста rspec для вложенных ресурсов

У меня есть модель Mastertag в качестве вложенного ресурса для Project с действием create как:

def create
    @mastertag =  @project.mastertags.build(params[:mastertag])

    if @mastertag.save
         redirect_to project_mastertags_path, notice: 'Mastertag was successfully created.' 
      else
         render action: "new" 
    end
end

где @project инициализируется в методе before filter.

У меня есть тест rspec как:

describe "POST create" do

   context "with valid params" do
      it "creates a new Mastertag" do

        expect {
          post :create, { project_id: @project.id, mastertag: FactoryGirl.attributes_for(:mastertag_without_project) }
        }.to change(Mastertag, :count).by(1)
   end
end

Когда я запускаю тест, метод @mastertag.save возвращает значение true, однако число остается неизменным. Следовательно, тест не пройден. Это выглядит довольно странно. Куда я иду не так?

2 ответа

Решение

Поскольку я использовал Mongoid, а Mastertags были встроены в Project, отдельная коллекция для Mastertags отсутствует.

Мне пришлось изменить код на:

describe "POST create" do

    context "with valid params" do
          it "creates a new Mastertag" do

            expect {
              post :create, { project_id: @project.id, mastertag: FactoryGirl.attributes_for(:mastertag_without_project) }
            }.to change {@project.reload.mastertags.count}.by(1)
    end
end

Я получил помощь по этому вопросу Stackru: RSpec / Mongoid: ожидается изменение количества встраиваемых моделей

Проверьте ваш project_mastertags_path и убедитесь, что редирект после, если @mastertag.save работает.

также попробуйте заменить if @mastertag.save с if @project.save в вашем методе создания.

Другие вопросы по тегам