使用 webrat 对 sinatra 应用程序的验收测试失败



我正在尝试使用 minitest 和 webrat 测试红宝石身份验证应用程序,但出现错误。

visit '/'这样的测试失败并显示错误Status 200 expected but was 404.

包含类似fill_in :email, :with => "first@company.com"代码的测试失败并出现错误Could not find field: :email

我阅读了几个sinatra,测试和webrat文档和论坛。其中一些是旧的,并建议像Sinatra::D efault这样的东西,但 github.com/brynary/webrat/wiki/sinatra,构建一个由Webrat测试驱动的Sinatra应用程序并向Masters学习:Sinatra内部是新的,但它们仍然失败。

基本上,我不喜欢rspec,cucumber等类似句子的语法,但确实想做行为驱动的开发。我真的很喜欢迷你测试语法,包括测试和输出,这就是我选择 webrat 进行 BDD 的原因。如果我错误地期望 webrat 满足验收测试要求,请简单地告诉我我应该使用这个框架或那个框架。

除此之外,主文件和测试文件的第一部分如下。我希望有人能解释我,我错过了什么?

test_file

require "test/unit"
require "minitest/autorun"
require "rack/test"
require 'webrat'
require_relative "../lib/kimsin.rb"
Webrat.configure do |config|
  config.mode = :rack
end
ENV["RACK_ENV"] = "test"
class KimsinTests < Test::Unit::TestCase
  include Rack::Test::Methods
  include Webrat::Methods
  include Webrat::Matchers
  def app
    Sinatra::Application.new
  end
  def test_create_user
    visit "/user/new"
    fill_in :username, :with => "first@company.com"
    fill_in :password, :with => "abC123?*"
    fill_in :confirm_password, :with => "abC123?*"
    click_link "Register"
    assert 201, last_response.status, "Status 201 expected but was #{last_response.status}.n#{error}"
    assert_contain /Logged in as first@company.com./, "No user created"
    assert_contain /Logout/, "Logout link not present"
  end

main_file

require "sinatra"
require "erb"
require_relative "../lib/kimsin/version"
require_relative "../lib/kimsin/user"
class Kimsin < Sinatra::Application
  use Rack::Session::Pool, :expire_after => 2592000
  set :session_secret, BCrypt::Engine.generate_salt
  configure :development do  
    DataMapper.auto_migrate!  
  end
  get "/" do
    if session[:user_id]
      user = User.get session[:user_id]
      email = user.email
      erb :index, :locals => { :email => email }
    else
      email = nil
      erb :index, :locals => { :email => email }
    end      
  end

将 Sinatra 与 Webrat 一起使用应该可以正常工作。我认为您看到的错误是由以下方法引起的(测试文件中的第 18 行左右):

def app
  Sinatra::Application.new
end

这是设置 Sinatra::Application 基类,以便在您真正需要设置自己的子类Kimsin时运行您的测试(因为您正在创建一个模块化风格的 Sinatra 应用程序),即

def app
  Kimsin.new
end

发生 404 错误和缺少字段是因为 Sinatra::Application 未定义您正在测试的任何路由。

如果您正在寻找与Webrat类似的替代品,您可能还想看看水豚。

最新更新