Я пытаюсь проверить, что Subscription
действительно был создан как часть моего метода Company#create
контроллера:Rails RSpec Controller Test
require 'rails_helper'
RSpec.describe CompaniesController, :type => :controller do
before do
user = build(:user, :company => nil)
login_with(user)
end
it "should have a subscription" do
company = build(:company).attributes
terms_accepted = { terms_accepted: true }
@company_params = company.merge(terms_accepted)
post :create, { company: @company_params }
# I need to expect something here like company.subscription.exists?
end
end
Я уже создал тест, чтобы проверить наличие company
создан, который содержится в 4-х строках, которые у меня есть в вышеприведенном тесте.
У меня есть company
завод, который также создает subscription
:
FactoryGirl.define do
factory :company do
name "ACME Test"
address_1 "123 Shady Lane."
address_2 "Suite 400"
city "Testville"
state "Somewhere"
zip_code "12345"
has_payment_plan false
stripe_id "cus_34d434343e4e3e3"
locked false
association :subscription
end
end
И ... У меня есть subscription
завод:
FactoryGirl.define do
factory :subscription do
company_id 1
trial true
custom nil
convert_date nil
per_device_price 3
trial_expires 5.days.from_now
freemium false
end
end
А вот мой Company#create
метод контроллера ... (да, у него много раздутий, и я в конечном итоге перехожу к модели, когда у меня есть базовая линия тестов, которые работают):
def create
company = Company.new(company_params)
user = current_user
if company.save && params[:terms] == "1"
user.company = company
accepted = true
user.terms_accepted = accepted
user.save
Subscription.create(company_id: user.company.id, trial: true, charge_date: Date.today + 1.month, per_device_price: 5.00, trial_expires: Date.today + 5.days)
device = Device.create(is_registered: true, registered_date: Date.today, company_id: user.company.id, name: user.company.name, is_sent: true, sent_date: Date.today)
location = Location.create(company_id: user.company.id, identifier: device.identifier, name: company.name)
device.serial_number = device.identifier
NewDevice.new_device(user, device).deliver
flash[:success] = "Welcome!"
redirect_to root_path
else
flash[:notice] = "You did not accept the terms of service."
sign_out(user)
redirect_to root_path
end
end
Я думал, что я на правильном пути, просто проверяя, Subscription was increased by 1
, как я сделал с моим Company#create
теста, но это возвращение:
Failures:
1) CompaniesController should have a subscription
Failure/Error:
expect {
post :create, { company: @company_params }
}.to change(Subscription, :count).by(1)
expected #count to have changed by 1, but was changed by 0
я это делаю неправильно?
вы можете отлаживать после user.save? и запустите Subscription.create (...), чтобы увидеть результат? – Gaston
Могу ли я сделать это в контексте тестовой среды? Я использую 'guard'. – Godzilla74
Я думаю, вы могли бы использовать pry-remote. В противном случае просто запустите проверку rake на отдельной консоли с помощью beebug после «user.save» – Gaston