1

我刚刚启动了一个新的 Rails 应用程序。到目前为止,还没有控制器或模型,只有两个引擎:炼油厂和狂欢节并排工作。

它们安装如下:

Store::Application.routes.draw do

  mount Spree::Core::Engine, :at => '/shop'
  mount Refinery::Core::Engine, :at => '/'

end

现在我已经使用炼油厂设置了几个页面,所以当我去 / 然后我看到炼油厂主页,可以点击关于我们页面等。当我去 /shop 然后我看到网站的狂欢部分也是运作良好。

现在我想写一个小测试,证明 spree 引擎正确安装在“/shop”。我尝试了以下测试:

require 'test_helper'

class SpreeEngineTest < ActionDispatch::IntegrationTest

  test "has been correctly mounted" do
    get "/shop"
    assert_response :success
  end

end

但它失败了,结果如下:

Expected response to be a <:success>, but was <302>

我查看了请求的正文,其中包含以下内容:

"<html><body>You are being <a href=\"http://www.example.com/refinery/users/register\">redirected</a>.</body></html>"

我正在使用标准的 testunit 包和 rails 3.2

谢谢你的帮助!

4

2 回答 2

0

抱歉回复晚了。原因是当 Refinery 检测到数据库中不存在具有正确角色的用户时,它会将您重定向到创建用户对话框。所以我的猜测是,您正在运行此测试而没有在测试数据库中注册任何用户,这会导致重定向。

在您的集成测试中,添加以下设置方法:

def setup
  user = Refinery::User.new(:username => 'testuser', :email => 'test@example.com', :password => 'test', :password_confirmation => 'test')
  assert user.create_first
end

这将确保存在具有正确角色的默认用户,并且测试的其余部分应该没问题。

于 2014-05-04T12:27:28.737 回答
0

也许您应该使用 assert_redirected_to 而不是 assert_response。 http://api.rubyonrails.org/classes/ActionDispatch/Assertions/ResponseAssertions.html

于 2012-09-20T11:04:38.843 回答