1

当使用自动化测试来测试我的自定义路由是否有效时,我所做的就是:

test "that /logout route opens the logout page" do
    get '/logout'
    assert_response :success
end

或测试“/logout 路由打开注销页面”确实得到 '/logout' assert_response :redirect end 这是一个足够好的测试吗?在我看来,这似乎有点模糊。我如何编写测试来明确验证 /logout 路由实际上是进入注销页面/为用户提供注销视图?

4

2 回答 2

1

我建议您查看rspec/railsand capybarafor integrationand oracceptance测试。这些测试更具描述性,听起来像您可能要问的内容。例如,此规范描述了身份验证过程

describe "signin" do
before { visit signin_path }

describe "with invalid information" do
  before { click_button "Sign in" }

  it { should have_selector('title', text: 'Sign in') }
  it { should have_selector('div.alert.alert-error', text: 'Invalid') }

  describe "after visiting another page" do
    before { click_link "Home" }
    it { should_not have_selector('div.alert.alert-error') }
  end
end

describe "with valid information" do
  let(:user) { FactoryGirl.create(:user) }
  before do
    fill_in "Email",    with: user.email.upcase
    fill_in "Password", with: user.password
    click_button "Sign in"
  end

  it { should have_selector('title', text: user.name) }

  it { should have_link('Users',    href: users_path) }
  it { should have_link('Profile',  href: user_path(user)) }
  it { should have_link('Settings', href: edit_user_path(user)) }
  it { should have_link('Sign out', href: signout_path) }
  it { should_not have_link('Sign in', href: signin_path) }

  describe "followed by signout" do
    before { click_link "Sign out" }
    it { should have_link('Sign in') }
  end
end

此示例取自Ruby on Rails 教程一书,可在线免费获取。它有数百个关于集成测试的示例。

于 2013-05-21T03:55:57.113 回答
0

Rails 有路由测试工具。有关更多信息,请参阅http://guides.rubyonrails.org/testing.html#testing-routes。这将测试某些请求是否路由到某个控制器和操作。如果您想在请求后验证特定页面或页面内容是否已加载,您可以使用集成/查看测试来验证页面特定数据是否可用(例如特定于相关页面的页面标题)。

于 2013-05-21T02:57:32.097 回答