2016-04-25 13 views
0

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 

Antwort

0

Es in Controller-Spezifikation scheint es nicht genug ist Aufgabe params wie assigner: @user zu definieren, also musste ich ändern

subject(:create_action) { xhr :post, :create, user_id: @user.id, task: attributes_for(:task, assigner: @user, executor: user) } 

zu

subject(:create_action) { xhr :post, :create, user_id: @user.id, task: attributes_for(:task, assigner_id: @user.id, executor_id: user.id) } 
Verwandte Themen