使用webrat对sinatra app进行验收测试失败

我正在尝试使用minitest和webrat测试ruby身份validation应用程序但是会出错。

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 , 建立一个由Webrat测试和大师学习 驱动的Sinatra应用程序 :Sinatra内部是新的,但他们仍然失败。

基本上,我不喜欢rspec,黄瓜等句子般的语法,但确实想做行为驱动的开发。 我真的很喜欢最小的语法,包括测试和输出,这就是我为BDD选择webrat的原因。 如果我错过了期望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  "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  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的替代品,您可能还想看看Capybara。