Количество таблиц не увеличивается после того, как 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
в вашем методе создания.