In meiner Controller-Spezifikationen funktioniert alles gut (Update-Aktion, bearbeiten Aktion, etc. auch über Js Anfrage), außer der Aktion erstellen. Aus irgendeinem Grund ändert es nicht die Task.count
, aber die HTTP-Antwort ist 200
.rspec controller spec für js anfrage
Es gibt keine anderen Callbacks und in dev ENV speichert es die Aufgabe in der db. Diese Fabrik geht in Modellspez. Ich habe auch versucht, die Notification.create
, TaskCreatorJob
und Conversation.create..
zu kommentieren, aber hat nicht geholfen. In meinen anderen Controller-Spezifikationen funktioniert die expect { create_action }.to change{Class.count}.by(1)
ordnungsgemäß.
Was habe ich vermisst?
conroller
def create
@task = Task.new(task_params)
@task.assigner_id = current_user.id
if @task.save
Notification.create(recipient_id: @task.executor_id, sender_id: current_user.id, notifiable: @task, action: "assigned")
TaskCreatorJob.perform_later(@task, @task.executor, @task.assigner)
Conversation.create_or_find_conversation(@task.assigner_id, @task.executor_id)
respond_to do |format|
format.js
end
else
respond_to do |format|
format.js
end
end
end
Fabrik
factory :task do
content { Faker::Lorem.sentence }
deadline { Faker::Time.between(DateTime.now + 2, DateTime.now + 3) }
association :executor, factory: :user
association :assigner, factory: :user
end
tasks_controller_spec.rb
.....
before(:each) do
login_user
end
describe "POST create" do
context "with valid attributes" do
let!(:user) { create(:user) }
let!(:profile) { create(:profile, user: @user) }
let!(:profile_2) { create(:profile, user: user) }
let!(:conversation) { create(:conversation, sender: @user, recipient: user) }
subject(:create_action) { xhr :post, :create, user_id: @user.id, task: attributes_for(:task, assigner: @user, executor: user) }
it "saves the new task in the db" do
expect{ create_action }.to change{ Task.count }.by(1)
end
it "responds with success" do
create_action
expect(response).to have_http_status(200)
end
end
end