2016-08-20 1 views
1

User.newを使用して新しいオブジェクトを作成しようとすると、テストを実行するときにエラーが発生します。代わりに私がUser.new({})を使用する場合、正常に動作します。ActiveModel ::パラメータなしのクラスを初期化するときのモデルエラー

渡されないとparamsは空にデフォルト設定されていませんか?

$ rails -v

Rails 5.0.0.1

user.rb

class User 
    include ActiveModel::Model 

    attr_accessor :name, :email, :country 
end 

user_test.rb

require 'test_helper' 
class User < ActiveSupport::TestCase 

    test "should create an empty user when initialized with no params" do 
    user = User.new 
    assert_not_nil(user, 'user cannot be empty') 
    end 
end 

試験結果

Error: 
User#test_should_create_an_empty_user_when_initialized_with_no_parameters: 
ArgumentError: wrong number of arguments (given 0, expected 1) 
    test/models/user_test.rb:7:in `new' 
    test/models/user_test.rb:7:in `block in <class:User>' 
+0

レールコンソールでUser.newを実行するとどうなりますか? user.rbにinitializeメソッドがありますか? – margo

+0

'test'の' User'はユーザー* test *ではなく、ユーザー*モデル*でしょうか? –

+0

時々、明白な点を指摘する人が必要です。@DaveNewton – pameck

答えて

0

一般に、attr_accessorはSQLテーブルの実際の列でない列のモデルに使用されています。

モデルに:name,:email:countryという列がある場合、attr_accessorと宣言する必要はありません。私はレールが今あなたたちに宣言するのを待っていると思う。

attr_accessor :name, :email, :country行をコメントアウトしてから、テストを再実行してください。

+0

速い応答をありがとう、私はそれのコメントを外してみましたが、動作しませんでした。 とにかく、 'attr_accessor'はgetterとsetterにクラスを与えるRubyの方法です。 [ActiveModel :: Model doc](http://api.rubyonrails.org/classes/ActiveModel/Model.html) – pameck

0

これは代わりに、モデルクラスを含むの

はそれが好き延ばすことがあります。

class Crime < ApplicationRecord 
//do your stuff here 
end 

その後、あなたは= User.new

+0

によると、これは問題ではないようです。これはちょうどテストの名前を間違えたようなものでしたモデル。 テスト名を 'User'から' UserTest'に変更しました。すべて修正済みです。 ありがとうございました! – pameck

0

あなたが参照しているUserを@userを使用することができますテストはテストそのものです。

最も簡単な解決策は、Rubyの規約に従い、テストクラスUserTestの名前を付けることです。

+0

時々、明白なことを指摘する人が必要です。ありがとうございます。 – pameck

関連する問題