2016-04-25 64 views
0

在我的控制器規範中,除了創建操作外,一切正常(更新操作,編輯操作等也通過js請求)。出於某種原因,它不會更改Task.count,但http響應是200js請求的rspec控制器規範

沒有其他的回調,並在開發ENV它將任務保存在分貝。該工廠通過型號規格。我也試圖註釋掉Notification.createTaskCreatorJobConversation.create..,但沒有幫助。在我的其他控制器規格中,expect { create_action }.to change{Class.count}.by(1)正常工作。

我錯過了什麼?

電腦板

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 

工廠

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 

回答

0

似乎在控制器的規格是不夠的定義一樣assigner: @user任務參數,可以讓我不得不改變

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

subject(:create_action) { xhr :post, :create, user_id: @user.id, task: attributes_for(:task, assigner_id: @user.id, executor_id: user.id) } 
相關問題