Я пытаюсь протестировать приложение проверки подлинности ruby с помощью minitest и webrat, но получить ошибки.Приемочное тестирование приложения sinatra с использованием webrat не работает
тесты, такие как visit '/'
неудачу с ошибкой Status 200 expected but was 404.
тесты, содержащие код, как fill_in :email, :with => "[email protected]"
неудачно с ошибкой Could not find field: :email
.
Я прочитал несколько документов о синатрах, испытаниях и webrat и форумах. Некоторые из них были старыми и предлагали такие вещи, как Sinatra :: Default, но github.com/brynary/webrat/wiki/sinatra, Building a Sinatra App Driven By Webrat Tests и Learning From the Masters: Sinatra Internals являются новыми, но они все еще терпят неудачу.
В принципе, мне не понравился синтаксис rspec, огурца и т. П., Но я хочу, чтобы он развивался поведением. Мне очень нравится минимальный синтаксис, как тесты, так и вывод, и именно поэтому я выбираю 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 => "[email protected]"
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 [email protected]/, "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
Спасибо, это определенно запустило приложение, так как в настоящее время работает работа с URL-адресами. Но я все еще получаю такие ошибки, как «Не могу найти поле:: email» и «Не удалось найти ссылку с текстом или названием или идентификатором« Вход ». Я тоже проверил его с Capybara, и у него свои ошибки, я добавил их по соответствующему вопросу. Есть ли информация или файл, который я должен предоставить, чтобы получить помощь по этому поводу? – barerd
Я не вижу ничего плохого в вызовах 'fill_in' или' click_link', которые вы делаете, поэтому кажется, что что-то еще пошло не так, и эти элементы действительно не существуют. Быстрый способ отладки этих проблем состоит в том, чтобы вызвать 'save_and_open_page' непосредственно перед неудачной строкой в вашем тесте, чтобы вы могли видеть веб-страницу в момент сбоя. Часто это свидетельствует об ошибке. Чтобы выполнить эту работу, вам нужно установить «запуск». – Steve
save_and_open_page работал отлично. Они показали мне, что моя сессия [: errors] вызвала проблему на странице входа, если ранее не был зарегистрирован пользователь. Я не мог заметить это случайно, потому что мои тесты были в строгом порядке (получить индекс, зарегистрировать нового пользователя, зарегистрировать плохой пользователь/пароль, логин и т. Д.). – barerd