【问题标题】:Using FactoryGirl without Rails, ActiveRecord or any database with RSpec在没有 Rails、ActiveRecord 或任何带有 RSpec 的数据库的情况下使用 FactoryGirl
【发布时间】:2014-06-21 16:44:50
【问题描述】:

我想知道是否有人知道是否可以在没有上述任何先决条件的情况下使用 FactoryGirl。

我想在为移动和网络甚至 API 驱动 UI 自动化测试时使用它来生成动态测试数据。

我知道我可以创建一些自定义帮助类/方法并使用 getter 和 setter 等,但我认为使用这个很棒的小 gem 会很好。

我进行了相当广泛的搜索,并尝试建立一个基本的 RSpec 项目(我也尝试过 Cucumber),但无济于事。看来我仍然需要使用相关登录来实例化类才能使用它。

FactoryGirl.define do
  factory :user  do
    firstname { Faker::Name.first_name }
    lastname { Faker::Name.last_name }
    age { 1 + rand(100) }
  end
end

如果我尝试在 RSpec 文件中调用它...

describe...
  it...
    user = build_stubbed(:user)
  end
end

我还阅读了文档并尝试了所有其他变体,我只是不断得到......

 Failure/Error: user = build_stubbed(:user)
 NameError:
   uninitialized constant User

这表明我需要一个具有所有逻辑的名为 User 的类。

【问题讨论】:

    标签: ruby rspec factory-bot


    【解决方案1】:

    您的猜测是正确的——您仍然需要自己编写 User 类。 factory_girl 适用于非 ActiveRecord 类,但它不会为您编写它们。

    默认情况下,factory_girl 通过不带参数调用new 来构造实例,因此您的类不应该def initializeinitialize 必须不带参数,就像ActiveRecord 模型一样。所以最简单的做法是像这样写User

    class User
      attr_accessor :firstname, :lastname, :age
    end
    

    如果您决定需要一个需要参数的initializeyou can use factory_girl's initialize_with to tell it how to instantiate your class

    【讨论】:

    • 考虑using struct 像这样:User = Struct.new :firstname, :lastname, :age。很好的解释here.
    猜你喜欢
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多