2015-08-14 2 views
1

У меня есть тест, который работает прямо сейчас, но он уродлив, и я не могу не думать, что есть лучший способ сделать это. В основном я выбираю запись из базы данных, а затем делаю вызов api, который должен влиять на эту запись. Однако единственный способ сделать тестовый проход - вытащить запись из базы данных во второй раз.rspec тестирование, что вызов api увеличивает счетчик

it "counts how many times a client has pulled its config" do 
    client = Endpoint.last 
    config_count = client.config_count 
    post '/api/config', node_key: client.node_key 
    same_client = Endpoint.find_by node_key: client.node_key 
    # expect(client.config_count).to eq(config_count + 1) 
    expect(same_client.config_count).to eq(config_count + 1) 
    end 

Записанная строка не работает. Это исправление настолько уродливое, что заставляет меня думать, что я делаю это неправильно. Я также пробовал:

expect {post '/api/config', node_key: client.node_key}.to change {client.config_count}.by(1) 

Так что же это за правильный способ проверить это?

ответ

1

Возможно, несколько способов решить эту проблему. Я обычно вызываю .reload на свой объект, если мне нужны обновленные значения для него, и мне все равно, что именно происходит внутри самого объекта.

it "counts how many times a client has pulled its config" do 
    client = Endpoint.last 
    config_count = client.config_count 
    post '/api/config', node_key: client.node_key 
    client.reload 
    expect(client.config_count).to eq(config_count + 1) 
end 
Смежные вопросы