2014-08-08 3 views
-1

Я пытаюсь создать новый объект учетной записи для своей спецификации. Ниже приведен код, но он терпит неудачу.неправильное количество аргументов (2 для 0..1)

@acc = FactoryGirl.create(:account, name: "Test", description: "Something about Test"); 
@user = FactoryGirl.create(:user, email: "[email protected]", password: nil, code: nil); 

create_account = Account.create(@acc,@user) 

Ошибка

Failure/Error: create_account = Account.create(@acc,@user) 
    ArgumentError: 
     wrong number of arguments (2 for 0..1) 

Ниже фактическое создание моего счета в контроллере.

@account = Account.create(account: { name: "#{params[:account][:name]}", description: "#{params[:description]}" }, user: { email: current_user.email }) 

Почему я получаю неправильный номер из arguments ошибки.

ответ

4

Вы написали это неправильно. Написать, как показано ниже: -

create_account = Account.create(account: @acc, user: @user) 

В Rails #create

атрибуты параметр может быть либо быть Hash или Array из хэшей. Эти Хеши описывают атрибуты на объектах, которые должны быть созданы.

+0

Я использую rspec-rails 3.0 .... как бы Я использую ожидание в этом случае. – UnderTaker

+0

Возьмите идеи отсюда - https://github.com/rspec/rspec-expectations#equivalence и https://www.relishapp.com/rspec/rspec-expectations/docs –

3

Вы должны иметь:

Account.create(account: @acc, user: @user) 

в вашей спецификации. Вы получаете сообщение об ошибке, потому что вы передаете два параметра в метод create, в то время как вы должны передать не более одного параметра (как в моем примере - вы передаете {account: @acc, user: @user} хэш.

+0

Спасибо, что он работает , но когда я пытаюсь создать_account.name.should = "Test", его отказ от использования неопределенного метода должен. – UnderTaker

+0

@UnderTaker Используйте '# expect' .. Возможно, вы находитесь в текущей версии Rspec. –

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