小编Dan*_*ley的帖子

Ruby on Rails中的Web请求中存在哪些数据(如果有)?

我决定在创建视图助手类时使用单例设计模式.这让我思考; 单例实例是否会在请求中存活?这导致了另一个问题,哪些变量(如果有的话)在Web请求中存活,并且这取决于部署?(Fastcgi,Mongrel,Passenger,......)

我知道Controller实例变量没有持久化.我知道常量是持久的(或重新加载?).但我不知道类变量,类上的实例变量,Eigenclasses,......

singleton persistence controller ruby-on-rails

18
推荐指数
1
解决办法
5639
查看次数

单元测试应该复制功能还是测试输出?

我已多次遇到这种困境.我的单元测试是否应该复制他们正在测试的方法的功能以验证其完整性?或者单元测试是否应该尝试使用大量手动创建的输入和预期输出实例来测试方法?

我主要询问的问题是,您测试的方法相当简单,并且可以通过查看代码一分钟来验证其正确的操作.

简化示例(在ruby中):

def concat_strings(str1, str2)
  return str1 + " AND " + str2
end
Run Code Online (Sandbox Code Playgroud)

上述方法的简化功能复制测试:

def test_concat_strings
  10.times do
    str1 = random_string_generator
    str2 = random_string_generator
    assert_equal (str1 + " AND " + str2), concat_strings(str1, str2)
  end
end
Run Code Online (Sandbox Code Playgroud)

我知道大多数时候你测试的方法都不够简单,不能用这种方式来证明这一点.但我的问题仍然存在; 在某些情况下这是一种有效的方法(为什么或为什么不这样做)

ruby testing tdd unit-testing

17
推荐指数
2
解决办法
721
查看次数

动态URL - > Rails中路由的控制器映射

我希望能够根据数据库中的信息动态地将URL映射到控制器.

我正在寻找功能相当的东西(假设一个View模型):

map.route '/:view_name',
    :controller => lambda { View.find_by_name(params[:view_name]).controller }
Run Code Online (Sandbox Code Playgroud)

其他人建议动态重建路由,但这对我不起作用,因为可能有数千个视图映射到同一个Controller

model-view-controller ruby-on-rails url-routing

14
推荐指数
2
解决办法
5178
查看次数

如何测试ruby Mixin模块?

我想知道测试ruby mixin模块的最佳方法,在这种情况下用于ActiveRecord模型,但实际上这是一个普遍的问题,适用于您使用mixin扩展的任何类.

尝试存储 mixin正在扩展的Class的所有必要功能,或者只是测试应用程序中存在和扩展的真实类是否更好?

Stubbing将删除测试的外部依赖性,但它无法在真实情况下测试mixin .如果测试失败,则可能是您的实现或您正在扩展的类已更改或中断.如果使用存根类进行测试,则测试可能会通过,但如果要扩展的类发生更改,则可能会破坏功能.

意见?

ruby tdd unit-testing ruby-on-rails

12
推荐指数
1
解决办法
2381
查看次数

断言消息:假设失败或假设成功

在使用任何语言进行测试时,每个人如何表达他们的断言消息

我看到三种明显的方式:

# assume failure
assert (4-2) == 2, "Subtracting 2 from 4 doesn't equal 2"

# describe success
assert (4-2) == 2, "Subtracting 2 from 4 should equal 2"

# be vauge with failure
assert (4-2) == 2, "Subtracting 2 from 4 is broken"
Run Code Online (Sandbox Code Playgroud)

这显然是一个简单的例子,但你明白了.什么是标准做法?你是做什么?为什么?

language-agnostic testing unit-testing

10
推荐指数
2
解决办法
2109
查看次数

Factory Girl:自动分配父对象

我刚刚进入工厂女孩,我遇到了一个困难,我肯定应该更容易.我只是无法将文档扭曲成一个有效的例子.

假设我有以下型号:

class League < ActiveRecord::Base
   has_many :teams
end

class Team < ActiveRecord::Base
   belongs_to :league
   has_many :players
end

class Player < ActiveRecord::Base
   belongs_to :team
end
Run Code Online (Sandbox Code Playgroud)

我想要做的是:

team = Factory.build(:team_with_players)
Run Code Online (Sandbox Code Playgroud)

让它为我建立一堆球员.我试过这个:

Factory.define :team_with_players, :class => :team do |t|
   t.sequence {|n| "team-#{n}" }
   t.players {|p| 
       25.times {Factory.build(:player, :team => t)}
   }
end
Run Code Online (Sandbox Code Playgroud)

但这:team=>t部分失败了,因为t它不是真的Team,它是一个Factory::Proxy::Builder.我必须将一个团队分配给一名球员.

在某些情况下,我想建立一个League并让它做类似的事情,创建多个拥有多个玩家的团队.

我错过了什么?

ruby unit-testing ruby-on-rails factory-bot

9
推荐指数
1
解决办法
4205
查看次数

使用HTTP PUT通过Jquery和Rails 3发送JSON

HTTP PUT并不完全是跨浏览器,因此Rails(我使用的是Rails 3)支持使用POST并传递_method查询参数.这很好,但在发送JSON时它似乎不起作用.

例:

$.ajax({
    url: window.location.pathname,
    type: 'POST',
    contentType: 'application/json',
    data: JSON.stringify({_method:'PUT', page:{my_data: 1}),
    dataType: 'json'
});
Run Code Online (Sandbox Code Playgroud)

当Rails看到这个时,它不会识别'_method'覆盖,因为它以JSON格式传递(也许转换是稍后的?).Rails返回错误"没有路由匹配......"说它找不到路由(到资源),我假设因为它与REST update = HTTP PUT动词不匹配,我甚至尝试将此附加到URL:?_method=PUT但得到了相同的结果.

那唯一似乎工作设置一个HTTP标头:

$.ajax({
    url: window.location.pathname,
    type: 'POST',
    contentType: 'application/json',
    data: JSON.stringify({my_data: 1}),
    dataType: 'json',
    beforeSend: function(xhr){
        xhr.setRequestHeader("X-Http-Method-Override","put");
    }
});
Run Code Online (Sandbox Code Playgroud)

设置HTTP覆盖标头是最好的方法吗?

ajax rest jquery ruby-on-rails http

9
推荐指数
1
解决办法
1万
查看次数

如何在字符串中找到正则表达式匹配的索引?

在php中,查找和捕获匹配给定正则表达式的所有子字符串相当简单,但是有一种简单的方法可以找到字符串中第一个正则表达式匹配的索引吗?

即我想要像这样运作的东西:

$str = "123456789abcdefgh";
$index = preg_index("#abcd#", $str);
// $index == 9
Run Code Online (Sandbox Code Playgroud)

php regex

9
推荐指数
1
解决办法
5798
查看次数

Selenium RC:自动在多个浏览器中运行测试

所以,我已经开始创建一些使用Selenium RC直接在浏览器中测试我的Web应用程序的Ruby单元测试.我正在使用Selenum-Client作为红宝石.我已经为我继承的所有其他selenium测试创建了一个基类.

这会创建大量SeleniumDriver实例,并在每个实例上调用所有缺少的方法.这基本上是并行运行测试.

其他人如何自动化这个?

这是我的实施:

class SeleniumTest < Test::Unit::TestCase
  def setup
    @seleniums = %w(*firefox *iexplore).map do |browser|
      puts 'creating browser ' + browser
      Selenium::SeleniumDriver.new("localhost", 4444, browser, "http://localhost:3003", 10000)
    end

    start
    open start_address
  end

  def teardown
      stop
  end

  #sub-classes should override this if they want to change it
  def start_address
    "http://localhost:3003/"
  end

  # Overrides standard "open" method
  def open(addr)
    method_missing 'open', addr
  end

  # Overrides standard "type" method
  def type(inputLocator, value)
    method_missing 'type', inputLocator, value
  end

  # …
Run Code Online (Sandbox Code Playgroud)

ruby selenium automated-tests unit-testing ruby-on-rails

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

在proc_open之后获取真正的退出代码

proc_open在php中使用启动子进程并来回发送数据.

在某些时候,我想等待进程结束并检索退出代码.

问题是如果进程已经完成,我的调用proc_close返回-1.对于proc_close实际返回的内容显然存在很多混淆,我还没有找到一种方法来可靠地确定打开的进程的退出代码proc_open.

我已经尝试过使用了proc_get_status,但是当进程已经退出时,它似乎也会返回-1.


更新

我不能proc_get_status曾经给我一个有效的退出代码,无论它是如何调用或时.它完全坏了吗?

php pipe process exit-code

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