当我的文件发生变化时,我使用guard-rspec自动运行必要的rspec测试,我喜欢它的工作原理.但是,当我调试具有多个测试的文件时,有时我只想重新运行单个测试.例如,使用命令行中的rspec:
rspec spec/requests/my_favorite_spec.rb:100
Run Code Online (Sandbox Code Playgroud)
这将只运行第100行的单一规格my_favorite_spec.rb.
我尝试将上述内容输入到防护控制台,但它只是运行所有测试,就像我刚按下回车一样.防护控制台中是否有另一种语法来运行单个规范?
在这样的简单搜索中:
find.where('name LIKE ?', "%#{search}%")
Run Code Online (Sandbox Code Playgroud)
我明白这#{search}只是字符串插值.这些%符号有什么作用?
我正在使用ng-options生成一个选项为位置的选择标记.标签是位置名称,值是位置ID(在数据库中).
我已将值(位置ID)绑定到ng-model属性,但我还想将标签(位置名称)绑定到不同的ng-model属性.(我需要将id字段分开,因为这将被发布到需要此特定属性的服务器.)在Angular中执行此操作的最佳方法是什么?
我的代码:
<div ng-app="app"><div ng-controller="edit">
<select ng-model="purchase.pickUpLocationId" ng-options="loc.id as loc.name for loc in purchase.availableLocations"></select>
<!-- This is the model not yet bound: -->
<p>You have selected {{ purchase.pickUpLocationName }}</p>
</div></div>
Run Code Online (Sandbox Code Playgroud)
var app = angular.module('app', []);
app.controller('edit', ['$scope', function($scope) {
$scope.purchase = {
pickUpLocationId: 30,
availableLocations: [
{id: 20, name: "Charleston, SC"},
{id: 30, name: "Atlanta, GA"},
{id: 40, name: "Richmond, VA"},
]
};
}]);
Run Code Online (Sandbox Code Playgroud) 我正在使用Rabl在rake任务中生成XML输出:
xml = Rabl.render @listings, 'feeds/listings', :format => :xml
# do stuff with xml
Run Code Online (Sandbox Code Playgroud)
但是,我需要在引用的rabl视图文件中使用多个辅助方法,并且NoMethodError我会从这个问题的答案中得到一个正如我所期望的那样.
我尝试使用extends,并include在使用的rake任务,但该类我仍然得到的helper方法同样的错误:
require "#{Rails.root}/app/helpers/feeds_helper.rb"
class SerializeData
extends FeedsHelper
def perform
xml = Rabl.render @listings, 'feeds/listings', :format => :xml
# do stuff with xml
end
end
Run Code Online (Sandbox Code Playgroud)
我的问题是:有没有办法在这种方式生成的rabl视图文件中使用辅助方法?(或者至少在某种程度上我仍然可以将它们作为rake任务中的字符串渲染?)帮助器方法被用于许多次,以便按照固定的要求正确地格式化各种数据,因此很难完全删除它们.
我正在对一个 Angular 控制器进行单元测试,该控制器使用Rails 资源工厂来处理来自 Rails 应用程序的 GET 和 POST 模型数据。POSTing 是通过模型上的方法完成的,例如(使用 model $scope.resource):
$scope.resource.update().then(successHandler, failureHandler);\nRun Code Online (Sandbox Code Playgroud)\n\n我在这个方法上有一个间谍来阻止 Ajax 调用,这样我就可以对控制器进行单元测试:
\n\nresUpdateSpy = spyOn($scope.resource, \'update\').and.callFake(function() { \n return {then: function(success, failure){ success(resUpdateResponse); }};\n});\nRun Code Online (Sandbox Code Playgroud)\n\n在我的一种控制器方法中,我希望资源与某些数据(特别是条带数据)一起发布。数据将在相同方法的 POST 后被覆盖,因此我无法在之后测试模型的状态。理想情况下,我想要这样的东西:
\n\nexpect($scope.resource.update).toHaveBeenCalled().whileValueOf($scope.resource.stripeKey).isEqualTo(\'tok123\');\nRun Code Online (Sandbox Code Playgroud)\n\n显然,这种方法在香草茉莉中是不存在的。Jasmine 中有没有办法(无论是普通的还是通过第三方项目)来测试调用给定间谍时值的状态?或者是否有另一种方法来测试这种情况 \xe2\x80\x93 具体来说,模型在其数据发布 \xe2\x80\x93 之前的状态,我丢失了?
\n\n我正在 Angular 1.3.14 应用程序上运行 Jasmine 2.2.0 和 Teaspoon 1.0.2。
\n我有一大块 HTML,ng-repeat其中某些元素有一个容器元素,而其他元素则没有。我目前正在通过两个ng-ifs实现这一目标:
<strike ng-if="elem.flag">
… <!-- several lines of directives handling other branching cases -->
</strike>
<div ng-if="!elem.flag">
… <!-- those same several lines copied-and-pasted -->
</div>
Run Code Online (Sandbox Code Playgroud)
虽然这有效,但这意味着我必须记住复制和粘贴任何编辑,这不仅不优雅而且容易出错。理想情况下,我可以使用以下内容(受ng-class语法启发)来解决这个问题:
<ng-element="{'strike':flag, 'div':(!flag)}">
… <!-- lots of code just once! -->
</ng-element>
Run Code Online (Sandbox Code Playgroud)
有没有办法为这种情况实现类似的非重复解决方案?
我在尝试使用恢复的藏匿处进行了一些更改git stash pop.有一些合并冲突,而不是解决它们,我决定重置它.不幸的是,在愚蠢的时刻,我做了一个git reset --hard,现在所有以前被隐藏的变化都消失了.
有没有办法恢复这些变化?我试过了git fsck --cache --no-reflogs --lost-found --unreachable HEAD,但列出的提交哈希都没有提到我需要的更改.我还可以做些什么?还是我失去了所有这些工作?
我正在探索使用opa test以下简单规则来测试我的 Rego 策略:
deny["Must be allowed"] {\n input.allowed == "no"\n}\nRun Code Online (Sandbox Code Playgroud)\n\n我能够在被拒绝的情况下成功测试这一点:
\n\ntest_denied_example {\n deny with input as {"allowed":"no"}\n}\nRun Code Online (Sandbox Code Playgroud)\n\n但是,当我尝试针对应该允许的情况对其进行测试时,如下所示:
\n\ntest_allowed_example {\n not deny with input as {"allowed":"yes"}\n}\nRun Code Online (Sandbox Code Playgroud)\n\n我收到错误:
\n\ndata.example.test_allowed_example: FAIL (330.534\xc2\xb5s)\n\n Enter data.example.test_allowed_example = _\n | Enter data.example.test_allowed_example\n | | Fail not data.example.deny with input as {"allowed": "yes"}\n | Fail data.example.test_allowed_example = _\nRun Code Online (Sandbox Code Playgroud)\n\ntest_allowed_example除了知道这是失败的测试之外,我无法真正解析此错误消息。
如何正确测试允许(而不是拒绝)输入的情况?
\n我正在尝试使用 ActionMailer 生成的电子邮件发送内嵌附件(图像)。但是,每次添加附件时,我都会收到空白的电子邮件正文。我尝试生成一个简单的测试电子邮件来消除其他变量,但我一直遇到同样的问题。
我正在使用 Rails 3.2.13,以下是我的代码和失败的规范:
应用程序/邮件/contact_mailer.rb
class ContactMailer < ActionMailer::Base
default from: "support@example.com"
def test
attachments.inline['logo.png'] = File.read Rails.root.join('app/assets/images/emails/logo.png').to_s
mail(to: 'my_email@gmail.com', subject: 'Testing, Testing')
end
def test_no_attachment
mail(to: 'my_email@gmail.com', subject: 'Testing, Testing')
end
Run Code Online (Sandbox Code Playgroud)
应用程序/视图/contact_mailer/test.html.erb
<p>This is a test.</p>
<p>This is only a test.</p>
<%= image_tag attachments['mhbo_logo.png'].url %>
Run Code Online (Sandbox Code Playgroud)
应用程序/视图/contact_mailer/test_no_attachment.html.erb
<p>This is a test.</p>
<p>This is only a test.</p>
Run Code Online (Sandbox Code Playgroud)
规格/邮件/contact_mailer_spec.rb
require 'spec_helper'
describe ContactMailer do
describe 'test' do
it 'should send' do
ContactMailer.test.deliver
ActionMailer::Base.deliveries.count.should eq 1
ActionMailer::Base.deliveries.last.body.should match /This is a …Run Code Online (Sandbox Code Playgroud) ruby-on-rails actionmailer html-email email-attachments ruby-on-rails-3
有没有办法定义一个类,以便您可以将该类作为执行所需代码的方法调用?例如(不起作用):
class MySpecialClass
def self(x)
x*x
end
end
Run Code Online (Sandbox Code Playgroud)
在控制台中:
MySpecialClass(4)
=> 16
MySpecialClass(5)
=> 25
Run Code Online (Sandbox Code Playgroud)
我似乎无法在网上找到任何东西,但是一些Ruby(2.1.2)类似乎能够有类似的行为,例如String:
String("hello")
=> "hello"
String(3)
=> "3"
Run Code Online (Sandbox Code Playgroud)
请注意,这与String#new类方法的行为不同:
String.new(3) TypeError: no implicit conversion of Fixnum into String
我有一个表的varchar2数据类型,如下所示
create table t11 (aa varchar2(100),bb varchar2(100));
Run Code Online (Sandbox Code Playgroud)
现在,如果我尝试插入systimestamp上面,则会插入值:
insert into t11 values (systimestamp,systimestamp);
commit;
Run Code Online (Sandbox Code Playgroud)
问题是Oracle允许这种转换的原因.
我正在使用Oracle 11g.
在Ruby 2.1.2,我可以成功地比较的结果Time.parse,并Time.utc在同一时间,它返回预期true:
Time.parse("2015-02-09T22:38:43Z") == Time.utc(2015, 2, 9, 22, 38, 43)
=> true
Run Code Online (Sandbox Code Playgroud)
但是,false当第二个值不是整数时,同样的比较会违反直觉:
Time.parse("2015-02-09T22:38:43.1Z") == Time.utc(2015, 2, 9, 22, 38, 43.1)
=> false
Run Code Online (Sandbox Code Playgroud)
尽管事实上第二个值仍然是整数并且仍然是等价的:
Time.parse("2015-02-09T22:38:43.1Z").sec
=> 43
Time.utc(2015, 2, 9, 22, 38, 43.1).sec
=> 43
Time.parse("2015-02-09T22:38:43.1Z").sec == Time.utc(2015, 2, 9, 22, 38, 43.1).sec
=> true
Run Code Online (Sandbox Code Playgroud)
而且,比较结果true是在相同方法的连续调用之间:
Time.parse("2015-02-09T22:38:43.1Z") == Time.parse("2015-02-09T22:38:43.1Z")
=> true
Time.utc(2015, 2, 9, 22, 38, 43.1) == Time.utc(2015, 2, 9, 22, 38, 43.1)
=> true
Run Code Online (Sandbox Code Playgroud)
为什么会这样?这是一个错误,还是我错过了什么?
我正在开发一个rails应用程序,我必须模型; 子和邮政.每个帖子属于一个子,一个子有很多帖子.在Sub show视图中,我想列出它拥有的所有帖子标题.
目前我有
<%= @sub.posts.each do |p|%>
<%= p.title %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
但是,当我运行时,它显示:
测试[#Post id:2,title:"Test",created_at:"2015-07-29 01:49:58",updated_at:"2015-07-29 01:49:58",user_id:1,sub_id: 1>]
我希望它只显示Test,而不是整个表条目
谢谢!
ruby ×4
angularjs ×3
html ×2
javascript ×2
actionmailer ×1
ajax ×1
git ×1
git-reset ×1
git-stash ×1
guard ×1
html-email ×1
jasmine ×1
model ×1
ng-options ×1
oracle ×1
oracle11g ×1
rabl ×1
rego ×1
rspec ×1
ruby-2.1 ×1
search ×1
sql ×1
systimestamp ×1
testing ×1
time ×1
unit-testing ×1
varchar2 ×1
view-helpers ×1
xml ×1