2017-02-10 8 views
0

これは問題ではありません。私は、このコードがテストしていると思っていることを確認したかっただけです。私はファクトリを介して構造体を構築/作成し、チェンジセットが有効であることを確認するテストをしたいと思います。このように私の工場も有効なデータを生成するためにテストされます。ExMachinaの工場チェンジセットと反復可能なスキーマテストのテスト/検証

@valid_attrs %{ 
    email: "[email protected]", 
    first_name: "some content", 
    last_name: "some content", 
    password: "some content", 
    password_hash: "some content", 
    username: "some content", 
    mobile: "1112223333"} 
    @invalid_attrs %{} 

    test "changeset with valid attributes" do 
    changeset = User.changeset(%User{}, @valid_attrs) 
    assert changeset.valid? 
    end 

それは、このような工場で書き直すことができ:例えば、構造体のチェンジセットを作成し、データを検証するための属性のマップを使用して、このデフォルトのテストが

test "changeset with ExMachina Factory attributes" do 
    user = build(:user) 
    changeset = User.changeset(user,%{}) 
    assert changeset.valid? 
    end 

私は時々意味が混乱していると私はこれが取るべき正しい方向であることを、いくつかの明確化を得るために期待していた、エリクサーを勉強していたよう。属性の空のマップを渡しています。これは、build(:user)ファクトリによって、変更セットが正しく検証されているために、すでにuserに定義されているためですか?

私の次のステップは、Rails/Rspec/FactoryGirlで行ったようなものです。FactorySpecはモデルのそれぞれを構築し、モデルが正しく構築されたことを検証します。この例では、ファクトリ・スペックは各モデルを作成し、検証します。

#spec/models/factory.rb 
FactoryGirl.factories.map(&:name).each do |factory_name| 
    describe "The #{factory_name} factory" do 
    it 'is valid' do 
     build(factory_name).should be_valid 
    end 
    end 
end 

#spec/models/post_spec.rb 
require 'rails_helper' 
RSpec.describe Post, type: :model do 

end 

#spec/models/user_spec.rb 
require 'rails_helper' 
RSpec.describe User, type: :model do 

end 

最後に、彼らのbuild/create世代を検証するために、それぞれの工場を使用して、再現テストがすべての構造体というExUnitに仕様/テストを作成する方法上の任意の提案はありますか?

issue (198)は、相互参照のためにExMachinaレポで公開されています。

+0

これらの2つのテストは等しくありません。私が正しく覚えていれば、ExMachinaはチェンジセットを使って構造体を構築しないので、これらのテストは同じように動作しません。 –

答えて

1

ExMachina文書は、属性マップを生成するparams_forの機能を持っています。このようにして、Phoneixスキャフォールドモデルジェネレータによって作成されたテストに加えて、テストを追加することができます。

test "changeset with valid factory" do 
    changeset = User.changeset(%User{}, params_for(:user)) 
    assert changeset.valid? 
    end 
関連する問題