2014-11-02 1 views
0

Все мои тесты проходили до того, как я написал этот тест - после написания следующего теста это не удалось. Обычно тесты дают вам советы, где искать, чтобы исправить тест, но это только показывает:"Relationship.count" не изменился на 2. Ожидаемый: 6 Фактически: 4

FAIL["test_should_successfully_create_2_user_relationship_objects", RelationshipsControllerTest, 1.146038] 
test_should_successfully_create_2_user_relationship_objects#RelationshipsControllerTest (1.15s) 
     "Relationship.count" didn't change by 2. 
     Expected: 6 
      Actual: 4 
     test/controllers/relationships_controller_test.rb:193:in `block in <class:RelationshipsControllerTest>' 

    74/74: [=====================================================================================================================] 100% Time: 00:00:01, Time: 00:00:01 

Finished in 1.14952s 
74 tests, 180 assertions, 1 failures, 0 errors, 0 skips 

линия 193 является:

assert_difference 'Relationship.count', 2 do 

, но я не знаю, где искать, чтобы это исправить. Я довольно новичок в Rails и понятия не имею, как решить эту проблему. Любые подсказки, где искать, будем очень благодарны! Я не уверен, как работает код, чтобы попробовать и выполнить тест, чтобы знать, с чего начать искать.

, насколько я могу судить, это соответствующий код:

relationships_controller_test.rb:

test "should successfully create 2 user relationship objects" do 
    assert_difference 'Relationship.count', 2 do 
     post :create, relationship: { followed_id: users(:firstname).name } 
    end 
    end 

модель/relationship.rb:

# makes sure 2 relationships are created otherwise none are created. 
    def self.request(user1, user2) 
    transaction do 
     relationship1 = create!(follower: user1, followed: user2, state: 'pending') 
     relationship2 = create!(follower: user2, followed: user1, state: 'requested') 

     relationship1.send_request_email 
     relationship1 
    end 
    end 

relationship_controller.rb:

def create 
    if params[:relationship] && params[:relationship].has_key?(:followed_id) 
     # @followed = User.find(params[:relationship][:followed_id]) 
     @followed = User.where(name: params[:active_relationship][:followed_id]).first 
     @active_relationship = Relationship.request(current_user, @followed) 
     if @active_relationship.new_record? 
     flash[:danger] = "There was a problem creating that relationship request" 
     else 
     flash[:success] = "Friend request sent" 
     end 
     redirect_to followed_path(@followed) 
    else 
     flash[:danger] = "Friend Required" 
     redirect_to users_path 
    end 
    end 

светильники/relationships.yml:

один: последователь: Firstname следовал: firstname3

два: последователь: Firstname следовал: firstname4

три: последователь: firstname3 следовал: Firstname

4: последователь: firstname2 следующее: имя

ответ

0

Похоже, что в вашем контроллере вы указываете params[:active_relationship] - должно ли это быть params[:relationship]? Если этот параметр не указан, кажется, что код контроллера выдаст ошибку.

Хорошим способом отладки проблем является запуск rails console и попытка имитировать поведение контроллера. Это даст вам более конкретную информацию о местоположении ошибки. В качестве альтернативы вы можете использовать жемчужину debugger (или byebug в рельсах 4), чтобы поместить точку останова в код вашего контроллера. Это позволит вам точно определить, какие параметры передаются контроллеру, а также позволит вам последовательно выполнять код по одной строке за раз.

Смежные вопросы