在为简单的Rails应用编写规范时,以下是完整测试覆盖的正确方法吗?
这是否足够,太多(例如,如果我编写了功能规格,我可以跳过一些较低级别的规范),还是不够?为什么?
我有一个在某些情况下在某些点重定向的控制器。当我将参数传递给控制器规范中的规范帮助器方法(使用最新的RSpec)以触发这些条件时,
ActionView::MissingTemplate
Run Code Online (Sandbox Code Playgroud)
错误。在仔细检查时,我应该重定向,如下所示:
redirect_to root_path && return
Run Code Online (Sandbox Code Playgroud)
然后在我的测试套件中引发了异常。我在应该被调用的控制器的索引函数中设置了一个断点(我重定向到的路由所指向的断点),并且在我的测试套件中从未调用过该断点。当我在开发环境和生产环境中运行该代码时,它似乎可以正常工作,但对于此测试,它不会让步。有任何想法吗?
我的测试看起来像这样:
describe TestController do
it 'redirects properly with failure' do
get :create, provider: 'test', error: 'access_denied'
expect(response.body).to match 'test'
end
end
Run Code Online (Sandbox Code Playgroud)
编辑:
更新!
似乎将我的重定向更改为
redirect_to root_path and return
Run Code Online (Sandbox Code Playgroud)
在RSpec中工作。
我不知道为什么&&运算符的优先级会违反规范。有人对这里发生的事情有任何解释吗?
我的问题:我在TeamCity上构建了一个zip文件:Files.zip它包含大量文件,zip文件是文件的一个很好的容器.
遗憾的是,由于遗留原因,zip文件的标题中没有版本号.我希望它有一个版本号.像这样:Files.1.2.3.4.zip
我想也许我可以创建一个包含拉链,我可以装饰一个版本号,如下所示:ContainingZip.1.2.3.4.zip!Files.zip这样就将Files.zip压缩成另一个拉链!(疯狂).
但是我无法通过TeamCity和它的工件路径来解决这个问题?
我觉得应该工作的是:/**/.=> Files.Zip => ContainingZip.1.2.3.4.zip!Files.zip但是这只会使Files.Zip
把它分成两步,也不是这样:/**/.=> Files.Zip Files.Zip => ContainingZip.1.2.3.4.zip这不起作用,因为在完成工件存在检查时,Files.zip不存在.
有人知道怎么做吗?(或者我必须在构建步骤中预拉链吗?)
谢谢.
我正在尝试将令牌与函数中的switch语句进行匹配,其中一个令牌需要能够识别下面代码中正则表达式定义的任何字符串或任何数字.
基本上,是否可以针对像这样的情况定义正则表达式 case "[a-z]+":
显然我现在拥有它的方式,除非我通过STRING或NUMBER作为参数,否则我的模式是不可达的.
public Token analyzeToken(String token) {
Token tokenType = null;
switch (token) {
case "STRING":
Pattern p = Pattern.compile("[a-z]+");
Matcher m = p.matcher(token);
if(m.matches()) {
tokenType = Token.STRING;
break;
}
case "NUMBER":
Pattern p = Pattern.compile("[0-9]+");
Matcher m = p.matcher(token);
if(m.matches()) {
tokenType = Token.NUMBER;
break;
case "(":
tokenType = Token.LEFT_PAREN;
break;
case ")":
tokenType = Token.RIGHT_PAREN;
break;
case ".":
tokenType = Token.PERIOD;
break;
case ":":
tokenType = …Run Code Online (Sandbox Code Playgroud) 我有一些可以从控制台运行的Cucumber测试
rake cucumber
Run Code Online (Sandbox Code Playgroud)
是否有命令行选项将测试结果存储到文本文件?
如果有人可以在StackOverflow等上指出任何其他来源,那么有关于此的更多信息,即使这样也会有所帮助.
我刚刚了解了Composite模式.据我了解,其背后的主要思想是统一处理树的边缘和节点.这意味着结构的"透明度"比"安全"更重要,导致我们这样的事情:
我理解这个概念,但是在牺牲安全性以保证透明度是一个不错的选择时,却无法想到这种情况.换句话说,我们在哪些情况下需要透明度以至于我们愿意做出如此严肃的牺牲?
我有一个骆驼字符串,例如:JustAString.
我想按照以下规则形成长度为4的字符串:
以下是可能发生的3种情况:
ThisIsMyString将产生TIMS(资本);ThisIsOneVeryLongString将屈服TIOV(前4个首都);MyString将产生MSTR(资本+ tr资本化).我设法用这个片段解决了前两个案例:
str.scan(/[A-Z]/).first(4).join
Run Code Online (Sandbox Code Playgroud)
但是,我不太确定如何最好地修改上面的代码片段来处理最后一个案例(甚至尝试不同的东西).
PS:字符串保证至少有一个大写字母和4个字符.但是,如果理论上缺少资本,则应考虑前4个字符.如果没有4个字符,则可以用第一个字母字符(abcd)填充缺少的字符.但是,如上所述,这两种边缘情况通常不会发生.
RSpec似乎按顺序匹配方法接收的消息.我不知道如何使以下代码工作:
allow(a).to receive(:f)
expect(a).to receive(:f).with(2)
a.f(1)
a.f(2)
a.f(3)
Run Code Online (Sandbox Code Playgroud)
我问的原因是有些调用a.f是由我的代码的上层控制的,所以我不能对这些方法调用添加期望.
我创建了一个新的迁移,它看起来像这样:
class AddCommentsToUsers < ActiveRecord::Migration
def change
add_column :users, :comments, :text
end
end
Run Code Online (Sandbox Code Playgroud)
现在有了Code Climate,我被警告了一个问题:
Missing frozen string literal comment.
我试着像这样解决它:
# frozen_string_literal: true
class AddCommentsToUsers < ActiveRecord::Migration
def change
add_column :users, :comments, :text
end
end
Run Code Online (Sandbox Code Playgroud)
但我仍然有同样的问题.我该如何解决?谢谢.