我正在尝试使用minitest和webrat测试ruby身份验证应用,但会出错。
visit '/'
之类的测试失败,错误为Status 200 expected but was 404.
包含fill_in :email, :with => "first@company.com"
等代码的测试失败,错误为Could not find field: :email
。
我阅读了几个sinatra,测试和webrat文档和论坛。其中一些是陈旧的,建议像Sinatra :: Default,但github.com/brynary/webrat/wiki/sinatra,Building a Sinatra App Driven By Webrat Tests和Learning From the Masters: Sinatra Internals是新的,但它们仍然失败。
基本上,我不喜欢rspec,黄瓜等类似句子的语法,但确实想做行为驱动的开发。我非常喜欢最小的语法,包括测试和输出,这就是我为BDD选择webrat的原因。如果我错过了期望webrat满足验收测试要求,请告诉我应该使用这个框架或那个框架。
除此之外,主文件和测试文件的第一部分如下所示。我希望有人可以解释我,我错过了什么?
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
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
答案 0 :(得分:0)
将Sinatra与Webrat结合使用应该可以正常工作。我认为您看到的错误是由以下方法引起的(在测试文件的第18行附近):
def app
Sinatra::Application.new
end
这是设置Sinatra :: Application基类,以便在您真正需要设置自己的子类Kimsin
时运行测试(因为您正在创建模块化样式的Sinatra应用程序),即
def app
Kimsin.new
end
404错误和缺失字段正在发生,因为Sinatra :: Application没有定义您正在测试的任何路由。
如果您正在寻找类似Webrat的替代方案,您可能还想看看Capybara。