我开始使用Michael Hartl" Ruby on Rails Tutorial"来开始学习Rails,然后我开始定制一些类以满足我自己的需要。 目前,我有两个可以使用我的应用程序管理的主要类:
我从教程中回收了大部分内容,并设法使应用程序适用于它们。
"用户"集成测试工作正常。 当开始开发" apps"测试,我发现有些东西会导致登录失败,我真的很痴迷于此。 这是"用户"集成测试(可行):
require 'test_helper'
class UsersCreateTest < ActionDispatch::IntegrationTest
fixtures :all
def setup
@admin = users(:admin)
end
test "user create with valid information" do
log_in_as(@admin)
assert is_logged_in?
get new_user_path()
...
assert_difference 'User.count', 1 do
post users_path, user:{ username: "newuser",
email: "user@example.com",
password: "pippo1",
password_confirmation: "pippo1",
...
}
follow_redirect!
end
...
end
end
以下是创建新应用程序&#34;的测试。 (不起作用):
require 'test_helper'
class AppsCreateTest < ActionDispatch::IntegrationTest
fixtures :all
def setup
@admin= users(:admin)
@app= apps(:app1)
end
test "create app with valid information" do
log_in_as(@admin)
assert is_logged_in?
get new_app_path()
...
assert_difference( 'App.count', 1) do
post apps_path, app: { appname: "newapp",
desc: "short descprition here",
...
}
follow_redirect!
end
end
end
最后,这是&#34; test_helper.rb&#34;部分,直接来自Hartl教程:
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
class ActiveSupport::TestCase
# Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
fixtures :all
def is_logged_in?
!session[:user_id].nil?
end
# Logs in a test user.
def log_in_as(user, options = {})
password= options[:password] || 'pippo1'
if integration_test?
post "/login", session: {
username: user.username,
password: password }
else
session[:user_id] = user.id
end
end
private
# Returns true inside an integration test.
def integration_test?
defined?(post_via_redirect)
end
end
&#34; app&#34;尝试在&#34; log_in_as&#34;中进行后期操作时测试失败。 似乎&#34;用户&#34;测试继承了某些方法,而#34; app&#34;测试没有。 任何建议都表示赞赏。