2013-12-18 2 views
0

Мой личный сайт строится на рельсах, но я застрял с User.count для области входа, которая не обновляется. Был сидеть с этим в течение дня, пытаясь заставить его работать, но пока не повезло. Я включил весь код, если кто-то может обнаружить мою ошибку, поскольку я не вижу ее.Rails - User.count не изменился на 1

class UsersControllerTest < ActionController::TestCase 
    setup do 
    @user = users(:one) 
    @input_attributes = { 
     name: 'luchia', 
     password: 'secret', 
     password_confirmation: 'secret' 
    } 
    end 

    test "should create user" do 
    assert_difference('User.count') do 
    post :create, user: @input_attributes 
    end 
    assert_redirected_to users_path 
    end 

Тогда мой контроллер Пользователь

# GET /users/1 
# GET /users/1.json 
def show 
end 

# GET /users/new 
def new 
    @user = User.new 
end 

# GET /users/1/edit 
def edit 
end 

# POST /users 
# POST /users.json 
def create 
    @user = User.new(user_params) 

respond_to do |format| 
    if @user.save 
    format.html { redirect_to users_url, notice: "User #{@user.name} was successfully created." } 
    format.json { render action: 'show', status: :created, location: @user } 
    else 
    format.html { render action: 'new' } 
    format.json { render json: @user.errors, status: :unprocessable_entity } 
    end 
end 

конец

И мой терминал ошибка:

$ rake test 
Run options: --seed 11633 

# Running tests: 

....[deprecated] I18n.enforce_available_locales will default to true in the future. If you really want to skip validation of your locale you can set I18n.enforce_available_locales = false to avoid this message. 
....................F...... 

Finished tests in 1.143021s, 27.1211 tests/s, 45.4935 assertions/s. 

1) Failure: 
UsersControllerTest#test_should_create_user [/Users/lucybloomfield/Documents/luchia /test/controllers/users_controller_test.rb:25]: 
"User.count" didn't change by 1. 
Expected: 3 
Actual: 2 

31 tests, 52 assertions, 1 failures, 0 errors, 0 skips 

Оценил чью помощь.

////////////////

Mmkay, это то, что я в конечном итоге придумываю, но это не очень краткие. Рейк-тест завершается этим, поэтому я думаю, что это нужно будет сделать.

test "should create user" do 
    assert_difference('User.count') do 
    post :create, {:user => {'name' => 'luchia', 'password' => 'secret', 'password_confirmation' => 'secret'}} 
    .to change(User, :count).by(1) 
    end 
    assert_redirected_to users_path 
    end 

//////////////

Edit снова, выше фрагмент кода не будет работать на втором тесте граблей.

ответ

0

Пример с водосвинки и огурца

describe "new" do 
      before do 
        visit new_user_path 
      end 

      it { should have_title(I18n.t("user.new")) } 

      describe "with invalid information" do 
        before { find("form#new_user").submit_form! } 

        it { should have_title(I18n.t("user.new")) } 
        it { should have_selector("div#alerts") } 
      end 

      describe "with valid information" do 
        before do 
          fill_in "user_name", :with => "user_name" 
          fill_in "user_email", :with => "[email protected]" 
          fill_in "user_password", :with => "123456" 
          fill_in "user_password_confirmation", :with => "123456" 
          find("form#new_user").submit_form! 
        end 

        it { should have_content(I18n.t("user.success"))} 
      end 
    end 
+0

Просто попробовал, но не повезло, то же самое rror при выполнении теста рейка. –

+0

@user = users (: one) в этой строке, пользовательская переменная заканчивается, выбирая действительного пользователя? – joseramonc

+0

См. Мой отредактированный вопрос для решения, которое я придумал. –

0

Вы должны сделать

puts YAML::dump(@user.save!) 

в методе создания из UsersControlller

def create 
    @user = User.new(user_params) 
    puts YAML::dump(@user.save!) 
... 
end 

Чтобы понять, почему это не спасает.
Затем проверьте user_params разрешение, если это необходимо

0

набор

I18n.enforce_available_locales = false 

в вашей конфигурации/application.rb

как внутри exampled:

module MyApp 
    class Application < Rails::Application 
    ... 
    I18n.enforce_available_locales = false 
    end 
end 

и перезапустить сервер

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