测试/验证工厂变更集& ExMachina中可重复的架构测试

时间:2017-02-10 18:55:41

标签: elixir ex-unit

这不是一个问题,我只是想确保此代码对我认为它具有的测试产生影响。我希望有一个通过工厂构建/创建结构的测试,并检查以确保更改集有效,就像默认生成的测试一样。这样我的工厂也会进行测试,以生成有效数据。

例如,此默认测试使用属性映射来创建结构变更集并验证数据:

  @valid_attrs %{
    email: "some@email.com",
    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

当我学习Elixir时,有时候语义会令人困惑,我希望得到一些澄清,这是正确的方向。是否传递了一个空的属性映射,因为它们已在user中由工厂build(: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以供交叉参考。

1 个答案:

答案 0 :(得分:1)

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

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