【问题标题】:How to use Cucumber/Factory Girl with Persistent Roles如何使用具有持久角色的 Cucumber/Factory Girl
【发布时间】:2011-10-16 16:35:36
【问题描述】:

我使用db/seeds.rb 用两个永远不会改变的用户角色(“Admin”、“User”)填充我的数据库。但是,当我运行测试时,种子数据不会被继承,结果是错误测试。

当我尝试运行 cucumber 时,出现以下错误:

使用默认配置文件...功能:登录以获取访问权限 到网站的受保护部分 一个有效的用户应该能够 登录

场景:用户未注册# features/users/sign_in.feature:6 未注册:角色 (参数错误)
/Users/x/.rvm/gems/ruby-1.9.2-p180/gems/factory_girl-2.0.0.rc4/lib/factory_girl/registry.rb:15:in find'
/Users/x/.rvm/gems/ruby-1.9.2-p180/gems/factory_girl-2.0.0.rc4/lib/factory_girl.rb:39:in
factory_by_name'
/Users/x/.rvm/gems/ruby-1.9.2-p180/gems/factory_girl-2.0.0.rc4/lib/factory_girl/syntax/vintage.rb:53:in default_strategy'
/Users/x/.rvm/gems/ruby-1.9.2-p180/gems/factory_girl-2.0.0.rc4/lib/factory_girl/syntax/vintage.rb:146:in
Factory'
/Users/x/rails/ply_rails/features/support/db_setup.rb:6:in '之前' 鉴于我没有登录# 特征/step_definitions/user_steps.rb:36

这是我的设置:

# features/support/db_setup.rb
Before do
  # Truncates the DB before each Scenario,
  # make sure you've added database_cleaner to your Gemfile.
  DatabaseCleaner.clean

  Factory(:role, :name => 'Admin')
  Factory(:role, :name => 'User')
end



# features/users/sign_in.feature
Feature: Sign in
  In order to get access to protected sections of the site
  A valid user
  Should be able to sign in

    Scenario: User is not signed up  # THIS IS LINE 6
      Given I am not logged in
      And no user exists with an email of "user@user.com"
      When I go to the sign in page
      And I sign in as "user@user.com/password"
      Then I should see "Invalid email or password."
      And I go to the home page
      And I should be signed out



# features/step_definitions/user_steps.rb
Given /^I am a "([^"]*)" named "([^"]*)" with an email "([^"]*)" and password "([^"]*)"$/ do |role, name, email, password|
  User.new(:name => name,
            :email => email,
            :role => Role.find_by_name(role.to_s.camelize),
            :password => password,
            :password_confirmation => password).save!
end

不知道从哪里开始进行这项工作,感谢您的帮助/时间!

【问题讨论】:

    标签: ruby-on-rails ruby testing cucumber factory-bot


    【解决方案1】:

    嗯,测试的重点是从一个干净的数据库开始,即一致的状态,所以一切都被擦除是件好事。

    其次,就黄瓜而言,您应该定义一个背景块来进行设置。这将针对每个场景运行,并具有明确知道每个操作的好处。如果您使用黄瓜场景纯文本显示给客户,这将特别有用。所以你应该这样做:

    Background:
        Given that the role "Admin" exists
        And that the role "User" exists
    
    Scenario:
        etc
    

    并为 that the role [blank] exists 创建自定义步骤,为您创建角色。

    【讨论】:

    • 我曾想过这样做,但后来假设因为我的应用程序的大部分活动都发生在登录用户的上下文中,我最终最终会在几乎每个控制器中复制 Background 子句我测试。现在考虑一下,我认为这实际上是可以的,因为它使测试更具可读性和明显性,但我只是想知道您(或任何人)对此有何想法。谢谢!!
    • 我自己喜欢 DRY 编程,但是在测试方面,我不喜欢冒险,而且冗长和明确也可以(再次重申:只是我的观点)。我认为在背景中重复多个黄瓜功能的某些步骤没有错。如果你也想,你可以少一点冗长,像Given that reference data exists 这样的步骤,把你所有的数据放在那里。我喜欢在黄瓜测试中清楚地说明事情,因为集成/验收测试更复杂。
    • 谢谢!我现在就是这样做的,效果很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-11
    • 1970-01-01
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多