小编aar*_*ell的帖子

何时以及何时不进行存根/模拟测试

我正在齐心协力将我的头围绕着Rspec,以便更多地转向TDD/BDD开发模式.然而,我还有很长的路要走,并且在一些基本面上挣扎:

就像,我应该什么时候使用模拟/存根,什么时候不应该?

以这种情况为例:我有一个Site模型has_many :blogsBlog模型has_many :articles.在我的Site模型中,我有一个回调过滤器,为每个新站点创建一组默认的博客和文章.我想测试那段代码,所以这里是:

describe Site, "when created" do

  include SiteSpecHelper

  before(:each) do
    @site = Site.create valid_site_attributes
  end

  it "should have 2 blogs" do
    @site.should have(2).blogs
  end

  it "should have 1 main blog article" do
    @site.blogs.find_by_slug("main").should have(1).articles
  end

  it "should have 2 secondary blog articles" do
    @site.blogs.find_by_slug("secondary").should have(2).articles
  end

end
Run Code Online (Sandbox Code Playgroud)

现在,如果我运行该测试,一切都会过去.然而,它也很慢,因为它为每一次测试创建一个新网站,两个新博客和三个新文章!所以我想知道,这是否适合使用存根?我们试一试:

describe Site, "when created" do

  include SiteSpecHelper

  before(:each) do
    site = Site.new
    @blog = Blog.new
    @article = Article.new …
Run Code Online (Sandbox Code Playgroud)

ruby unit-testing rspec ruby-on-rails mocking

8
推荐指数
1
解决办法
1275
查看次数

跨多个域的SSL和身份验证

我正在使用Ruby on Rails构建一个应用程序,允许用户注册并创建自己的子域:

joebloggs.myapp.com
Run Code Online (Sandbox Code Playgroud)

因此,至少我需要一个通配符SSL证书来处理用户何时传递敏感数据(身份验证,支付等).

此外,我们允许想要将自己的域映射到其帐户的用户,例如:

www.joebloggs.com
Run Code Online (Sandbox Code Playgroud)

这突然间引起了巨大的麻烦.我假设没有SSL产品可用于此目的(即,可能在无限域上使用)?

该应用程序本质上是一个CMS,因此它有一个面向公众的网站和一个管理员后端.面向公众的网站方面必须具有映射到用户域的功能.但是,我不太关心管理区域,并且很乐意强迫用户通过他们的子域登录和管理他们的网站.

然而,虽然对于大多数网站而言用户是否登录并不重要,但我希望能够知道用户是否已登录,因此我可以为登录用户提供稍微不同的内容.我假设这会导致我出现问题,因为cookie不能用于多个域(或者可以吗?).我正在使用Authlogic进行身份验证.

真的,我只是想知道是否有人曾经遇到过这样的情况?如果是这样,你采取了什么方法来解决这里的几个问题?

authentication ssl ruby-on-rails ssl-certificate

7
推荐指数
1
解决办法
1003
查看次数

解决Rails应用程序中的类名冲突

我一直在构建一个执行会计功能的Rails应用程序.作为其中的一部分,我有一个带有类名的模型Transaction.到目前为止一直很好,我已经建立了这个功能一个月左右,一切都按预期工作.

到现在...

我刚刚发现一些使用Ruport库在几个月前开发的旧报告功能已停止工作.看来,Ruport在生成PDF时需要一个也有类/模块命名的库Transaction.

TypeError in Admin/team reportsController#generate
Transaction is not a module

...

This error occurred while loading the following files:
  pdf/writer
  transaction/simple
Run Code Online (Sandbox Code Playgroud)

所以,我正在寻找一个快速解决方案.一个希望不涉及重命名我的Transaction模型和重构最后几周的代码.

期待一些聪明的建议:)

ruby conflict ruby-on-rails classname ruport

7
推荐指数
2
解决办法
5874
查看次数

Rails 3使用自定义属性/方法response_to json

在rails应用程序中,我有一个动作,返回不同模型集合的json表示.它看起来事情是这样的:

respond_to :json

def index
  @cars = Car.all
  @vans = Van.all
  respond_with({
    :cars => @cars,
    :vans => @vans
  })
end
Run Code Online (Sandbox Code Playgroud)

但是,我想自定义传递给json对象的属性和方法.有一点像:

respond_with({
  :cars => @cars.to_json(:only => [:make, :model], :methods => [:full_name]),
  :vans => @vans
})
Run Code Online (Sandbox Code Playgroud)

执行上述操作后,会将"cars"的json表示转义为一个大字符串,如:

{
  "cars":"[{\"car\":{\"make\":\"Ford\"  ... etc
  "vans": [{"van":{"make":"Citreon"  ... vans not escaped
}
Run Code Online (Sandbox Code Playgroud)

显然,我正以错误的方式接近这一点.谁能指出我正确的方向?

ruby activerecord json ruby-on-rails ruby-on-rails-3

7
推荐指数
1
解决办法
6023
查看次数

如何使用has_and_belongs_to_many将新模型与现有模型相关联

我有两个模型,有很多关系使用has_and_belongs_to_many.像这样:

class Competition < ActiveRecord::Base
  has_and_belongs_to_many :teams
  accepts_nested_attributes_for :teams
end

class Team < ActiveRecord::Base
  has_and_belongs_to_many :competitions
  accepts_nested_attributes_for :competitions
end
Run Code Online (Sandbox Code Playgroud)

如果我们假设我已经在数据库中创建了几个比赛,那么当我创建一个新的团队时,我想使用嵌套表单将新团队与任何相关的比赛相关联.

在这一点上,我确实需要帮助(已经坚持了好几个小时!)我认为我现有的代码已经以错误的方式解决了这个问题,但我会在以下情况下展示:

class TeamsController < ApplicationController
  def new
    @team = Team.new
    @competitions.all
    @competitions.size.times {@team.competitions.build}
  end
  def create
    @team = Team.new params[:team]
    if @team.save
      # .. usual if logic on save
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

并且观点......这是我真正陷入困境的地方所以我不会同时发布我的努力.我想要的是每个比赛的复选框列表,以便用户可以选择适当的比赛,并且不选择那些比赛.

我真的坚持这个,所以欣赏任何指向正确的方向,你可以提供:)

ruby many-to-many model ruby-on-rails associations

6
推荐指数
1
解决办法
2037
查看次数

添加自定义:使用Rails 3路由的新路由

在Rails 2中,我们可以new为资源丰富的路由添加自定义操作,例如:

map.resources :users, :new => {:apply => :get}
Run Code Online (Sandbox Code Playgroud)

我们如何在Rails 3中实现同样的功能?

resources :users do

  get :apply, :on => :new    # does not work

  new do
    get :apply               # also does not work
  end

end
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

routing ruby-on-rails ruby-on-rails-3

6
推荐指数
1
解决办法
3317
查看次数

PHP preg_replace - 使用匹配作为键从数组中查找替换

我有一个字符串,可以包含多个匹配(由百分比标记包围的任何单词)和一个替换数组 - 每个替换的键是正则表达式的匹配.有些代码可能会更好地解释......

$str = "PHP %foo% my %bar% in!";
$rep = array(
  'foo' => 'does',
  'bar' => 'head'
);
Run Code Online (Sandbox Code Playgroud)

期望的结果是:

$str = "PHP does my head in!"
Run Code Online (Sandbox Code Playgroud)

我尝试了以下,没有一个工作:

$res = preg_replace('/\%([a-z_]+)\%/', $rep[$1], $str);
$res = preg_replace('/\%([a-z_]+)\%/', $rep['$1'], $str);
$res = preg_replace('/\%([a-z_]+)\%/', $rep[\1], $str);
$res = preg_replace('/\%([a-z_]+)\%/', $rep['\1'], $str);
Run Code Online (Sandbox Code Playgroud)

因此,我转向Stack Overflow寻求帮助.任何接受者?

php regex preg-replace

6
推荐指数
1
解决办法
6655
查看次数

将变量传递给Liquid模板中的模型实例方法

本周末我一直在玩液体模板引擎,我想知道以下是否可行.

假设我latest_postsBlog模型中有一个方法,我可以传递一个整数来获取最新的N个帖子.是否可以在液体模板中使用该方法?

例如:

class Blog

  has_many :posts

  def latest_posts(n)
    posts.latest(n) # using a named scope
  end

  def to_liquid(*args)
    {
      'all_posts' => posts.all,  # allows me to use {% for posts in blog.all_posts %}
      'last_post' => post.last,  # allows me to use {% assign recent = blog.last_post %}
      'latest_posts' => posts.latest_posts(args[0])  # how do I pass variables to this?
    }
  end

end
Run Code Online (Sandbox Code Playgroud)

在上面的简单的例子,在我的液体模板,我可以使用blog.all_postsblog.last_post,但不知道我会怎么做像什么blog.latest_posts: 10.

有人能指出我正确的方向吗?

我想到的一个想法是创建一个Liquid过滤器并将Blog对象和整数传递给它.就像是:

{% for post in blog …
Run Code Online (Sandbox Code Playgroud)

ruby template-engine liquid

6
推荐指数
2
解决办法
6074
查看次数

在JavaScript中按任意列表对对象数组进行排序

给定一个像这样的对象数组:

objects = [
  { id: 'aaaa', description: 'foo' },
  { id: 'bbbb', description: 'bar' },
  { id: 'cccc', description: 'baz' }
];
Run Code Online (Sandbox Code Playgroud)

像这样的字符串数组:

order = [ 'bbbb', 'aaaa', 'cccc' ];
Run Code Online (Sandbox Code Playgroud)

我如何对第一个数组进行排序,以便id属性与第二个数组的顺序相匹配?

javascript arrays sorting

6
推荐指数
1
解决办法
2690
查看次数

Rails 3,Authlogic,NGINX和HTTP基本身份验证不能很好地协同工作

我正处于使用Rails 3构建应用程序的早期阶段.用户身份验证由Authlogic提供支持,我已将其设置为标准(根据示例文档),并且所有内容都按预期在本地运行.

我刚刚将应用程序部署到Centos 5.4/NginX/Passenger的干净服务器安装中,因此工作人员可以开始登录并输入内容等.但是,我们还有很长的路要走,因为我已经为公众的眼睛做好了准备,所以我使用过NginX的基本身份验证模块,使整个站点保持在另一级别的身份验证之后.

不幸的是,Authlogic的身份验证和NginX的基本身份验证似乎相互冲突.如果打开了基本身份验证,则无法使用Authlogic登录,但如果禁用基本身份验证,则Authlogic将按预期工作.

我没有发布任何代码,因为我真的不确定哪些代码是相关的.我想知道这是否是一个已知问题,如果有任何更改,我可以对配置进行更改以解决问题?

ruby-on-rails nginx basic-authentication authlogic

5
推荐指数
1
解决办法
2060
查看次数