2017-02-10 29 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 

当我正在学习药剂,有时语义混乱,我希望能得到一些澄清,这是采取正确的方向。是否传递属性的空映射,因为它们已在工厂函数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 

最后,是否有关于如何在ExUnit创建规范/测试重复测试,所有使用其各自的工厂结构,以验证其build/create一代有什么建议?

我有一个issue (198)开放在ExMachina回购以及交叉引用。

+0

这两个测试不相等。如果我没有记错,ExMachina不会使用变更来构建结构,所以这些测试不会以相同的方式工作。 –

回答

1

ExMachina文档具有标题为params_for的函数,该函数生成属性映射。通过这种方式,除了由Phoneix脚手架模型生成器创建的测试之外,还可以添加一个测试。

test "changeset with valid factory" do 
    changeset = User.changeset(%User{}, params_for(:user)) 
    assert changeset.valid? 
    end