【问题标题】:BDD: How should I test authentication when I use Devise?BDD:当我使用 Devise 时,我应该如何测试身份验证?
【发布时间】:2013-09-29 18:50:10
【问题描述】:

你编写测试,让它们失败,然后编写你的代码让它们通过。很简单...直到您决定使用 gem 代替您的代码。例如,设计。

我真的不知道我应该写什么集成(也就是请求或功能)规范。

如果我不写任何东西,我必须打开浏览器检查 gem 与应用程序的集成是否正常,这很糟糕(cfr. Ryan Bates)。另外,我可能会错误地破坏某个功能。

另一方面是不正确的,无法测试别人的代码。

什么是正确的平衡?添加 Devise 时如何做 BDD(使用 RSpec)?

非常感谢您在使用 Devise 时编写的作为授权测试的具体示例。

如果您的应用程序中有自定义设计视图,您将如何回答相同的问题?

【问题讨论】:

    标签: ruby-on-rails rspec devise tdd bdd


    【解决方案1】:

    您绝对可以使用 Capybara 和 Rspec 实现这一目标。

    按照此处https://github.com/jnicklas/capybara#using-capybara-with-rspec 的说明安装水豚 - 提示,确保将您指定的目录命名为features

    然后只需使用 capybara 来测试驱动您的应用程序

    所以为了测试你的注册,这个例子应该可以工作,显然你需要根据你的应用调整参数和路由。

    require 'spec_helper'
    
    feature 'Signing up' do
      scenario 'creates a new user' do
        visit '/users/sign_up'
        password = 'samplepassword'
        fill_in 'First name', with: 'Testy'
        fill_in 'Last name', with: 'McTester'
        fill_in 'Email', with: 'testy@example.com'
        fill_in 'Password', with: password
        fill_in 'Password confirmation', with: password
        click_link 'Sign up'
        expect(page).to have_content 'You have signed up successfully'
      end
    end
    

    Devise 还具有测试助手,您可以在测试应用的其他区域时使用它们https://github.com/plataformatec/devise#test-helpers

    这些对于确保您在各个页面上设置的任何限制都是正确的特别有用。您可以通过测试如果用户登录或具有错误角色等会发生什么来测试此行为。

    【讨论】:

    • +1 但是除了关于如何测试一般身份验证的实用指南(我已经知道),我想就使用时应该测试什么和不应该测试什么进行理论上的讨论已经测试过的代码(就像一个 gem)。
    【解决方案2】:

    我想出了以下几点思考:

    • 语义上的原因是高级测试(例如带有 Capybara 的 RSpec)意味着您正在描述网站的功能,并且身份验证仍然是一项功能,即使您使用 gem 也是如此
    • 一个实际的原因是,如果我不添加测试,我肯定必须通过浏览器测试身份验证
    • 假设您决定移除 gem 并从头开始重写身份验证;这是重构,因为测试应该允许重构而不需要更改它们,还有另一个原因要从一开始就添加高级测试(即使您将使用 gem)
    • 如果您在另一个抽象级别上进行测试,那么测试已经测试过的代码并没有什么坏处:例如,功能测试和集成测试总是与单元测试部分重叠
    • 您没有重复测试相同的东西,因为您正在测试 gem 与您的网站的集成,而这不可能已经在 gem 中测试过

    恕我直言,总而言之,测试基于第三方 gem 的身份验证系统的理由比不测试的理由多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-30
      • 2012-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-02
      相关资源
      最近更新 更多