在编写RSpec测试时,我发现自己编写了大量看起来像这样的代码,以确保在执行测试期间调用一个方法(为了论证,我们只能说我不能真正地查询状态调用后的对象,因为该方法执行的操作不容易看到效果).
describe "#foo"
it "should call 'bar' with appropriate arguments" do
called_bar = false
subject.stub(:bar).with("an argument I want") { called_bar = true }
subject.foo
expect(called_bar).to be_true
end
end
Run Code Online (Sandbox Code Playgroud)
我想知道的是:有比这更好的语法吗?我是否缺少一些时髦的RSpec非常棒,可以将上面的代码减少到几行?should_receive听起来它应该这样做但是进一步阅读它听起来并不完全是它的作用.
我发现自己编写了很多像这样的代码来选择一个匹配的项目
var item = (from x in Items where x.Id == 123 select x).First();
Run Code Online (Sandbox Code Playgroud)
是否有一种更清洁的方式,或者这是如何简洁,我会得到?
编辑:应该说"使用linq语法的清洁方式".我已经知道了lambda语法,它开始看起来这实际上是唯一的方法.我确实得到了一些有用的信息,所以感谢所有回复的人.
当我在rails项目上工作时(顺便说一下,我还处于"初学者"阶段的学习阶段),文件config/database.yml似乎就像数据库密码等那样.但是,似乎没有人建议将它放在.gitignore文件中 - 为什么?
当然我需要排除这个或我的敏感数据库配置细节如果我推送到github将最终成为公众知识.
我在轨道教程中看到过这段代码
def access_denied
redirect_to login_path, :notice => "Please log in to continue" and return false
end
Run Code Online (Sandbox Code Playgroud)
在学习rails之前,我做了大量的ruby研究,我读过的书都没有涵盖这里的"返回错误"语法.我在rails语法中找不到任何提及它,是否有人能够提供链接或任何解释清除它?
我不明白这里需要"和",因为我认为ruby总会返回最后一个评估的表达式.
我刚刚进入Ruby - 其中一个让我放心的事情就是Intellisense /代码完成,所以如果我没有这个,我真的需要让API随时关闭.我上周发现了这个发现:
gem server
Run Code Online (Sandbox Code Playgroud)
它启动一个服务器,让您查看所有已安装宝石的文档.有没有相当于这个允许您浏览标准库而不是宝石?
使用Linux/Ruby 1.8.7.
我正在研究我的第一个宝石(也是ruby的新手),到目前为止整个代码都在这里;
https://github.com/mikeyhogarth/tablecloth
我试图做的一件事是创建一个yaml文件,gem可以作为查找访问(在lib/tablecloth/yaml/qty.yaml下).这一切都很好,单元测试全部通过,无论何时我构建并安装gem并尝试在irb(从我的主文件夹)下运行我得到;
Errno::ENOENT: No such file or directory - lib/tablecloth/yaml/qty.yaml
Run Code Online (Sandbox Code Playgroud)
代码现在在〜/ lib/tablecloth中查找文件...而不是在gem安装到的目录中.所以我的问题是;
1)我应该如何更改recipe.rb的第27行,以便它查找gem安装到的文件夹?
2)我实际上是不正确地接近这整个事情(以这种方式在gem中使用静态yaml文件是否合适)?
我继承了一个Web框架,以前的开发人员在页面生命周期的init/unload方法中打开并关闭了他的数据库连接.基本上构造函数是这样的(简化以证明这一点);
public class BasePage
{
protected DBConnection _conn;
public BasePage()
{
Init += StartConnection;
Unload += EndConnection;
}
private void StartConnection(object sender, EventArgs e)
{
_conn = new DBConnection(Application["connectionstring"].ToString());
}
private void EndConnection(object sender, EventArgs e)
{
if (_conn == null)
return;
if (_conn.Connection.State == ConnectionState.Open)
{
_conn.Close();
_conn.Dispose();
}
}
}
Run Code Online (Sandbox Code Playgroud)
自从我来到这里以来,发展一直很快,所以我从未停下来考虑它.最近,访问已经开始,我们已经开始获得可怕的"Timeout过期.在从池中获取连接之前已经过了超时时间......"错误.
我目前正在查看其余的代码,寻找可能的连接泄漏,但上面的代码从来没有完全适合我,我想消除它作为潜在的罪魁祸首.那么问题;
即使在发生异常的情况下,我是否可以依赖"卸载"方法始终被调用?或者任何人都可以使用上述模式看到任何其他潜在问题,这将使其成为这些连接泄漏的主要嫌疑人?
干杯,
米奇
编辑:在调试中,即使存在异常,也始终会调用unload方法.我真的只需要知道不会调用此方法的任何情况,所以我可以弄清楚这是否需要首先进行重构.
编辑:感谢那些迄今为止做出回应的人,但请不要再提出关于IDisposable类或"使用"或"捕获/最终"模式的建议 - 这不是我的问题!我的问题是具体是一个页面是否可以运行其"Init"事件但是然后无法运行是"卸载"事件,以及为什么会发生这种情况.
c# asp.net database-connection connection-pooling page-lifecycle
刚学习rails,我正在进行迁移,这一切都从逻辑上开始,直到我在代码中遇到奇怪的事情;
rails generate migration AddRegionToSupplier
Run Code Online (Sandbox Code Playgroud)
上面生成了一个只有"def change"方法的迁移文件.
我用Google搜索,发现这正是应该发生的事情;
http://guides.rubyonrails.org/migrations.html
我原以为它会生成一个"def up"和"def down"方法,以便可以回滚迁移.我这一代人做错了什么,或者我错过了一些明显的东西?
上下文是我在内存中有一组缓存的值,这些值很难获取,而另一组相关数据的获取成本低廉且无法缓存(业务规则).我已经完成了所有工作,但我只是想知道是否有人能想到更便宜的方式进行这种更新......
foreach (var nonCachedItem in searchItemsNonCached)
{
foreach (var cachedItem in searchItemsCached)
{
if (cachedItem.ID == nonCachedItem.ID)
nonCachedItem.Description = cachedItem.Description;
}
}
Run Code Online (Sandbox Code Playgroud)
它基本上只是为了将缓存的信息与我刚收到的信息相匹配.一切正常,负载几乎可以忽略不计,但我对提高效率有点傻逼.
编辑:在上面,searchItemsNonCached和searchItemsCached都是SearchItem的列表,其中Searchitem是一个定制对象.
我已经实现了一个画布元素,它使用drawarc来创建在背景上以不同速度上升的气泡效果(这是一个水下主题客户端的水下主题网站) - 它看起来非常好,我很高兴它,但我注意到某些浏览器(特别是IE9)存在轻微的性能问题.
我正在使用drawarc绘制气泡以创建半透明圆圈 - 任何人都可以告诉我这是否或多或少(在客户端性能方面)将图像/精灵标记到画布上?
-麦克风
有没有人知道是否明确地取消引用一个对象;
finalResults = null;
Run Code Online (Sandbox Code Playgroud)
给垃圾收集器更多的轻推清理?我有一个相当大的物体(不是很大,但是足够大,我不希望它在使用后长时间停留)
上述帮助还是无意义的代码?我特意避免以编程方式与GC本身交谈,我只需要知道上述内容是否会起到任何形式的提示/提示.
我正在考虑使用fire-and-forget模式从ASP/C#应用程序发送电子邮件,因此用户不会在它做任何事情时等待.我之前使用过这种模式,就像这篇文章解释的那样;
所有非常简单的东西,但我真的需要了解性能方面的考虑因素.我是否应该在每次需要发送电子邮件时继续创建新线程,并且只相信框架来管理它们?或者有没有办法我可以在完成后手动将线程放回池中?