小编eir*_*kir的帖子

如何为rspec运行单一测试?

当我的文件发生变化时,我使用guard-rspec自动运行必要的rspec测试,我喜欢它的工作原理.但是,当我调试具有多个测试的文件时,有时我只想重新运行单个测试.例如,使用命令行中的rspec:

rspec spec/requests/my_favorite_spec.rb:100
Run Code Online (Sandbox Code Playgroud)

这将只运行第100行的单一规格my_favorite_spec.rb.

我尝试将上述内容输入到防护控制台,但它只是运行所有测试,就像我刚按下回车一样.防护控制台中是否有另一种语法来运行单个规范?

ruby rspec ruby-on-rails guard

37
推荐指数
1
解决办法
8888
查看次数

在Rails WHERE LIKE查询中,百分号是什么意思?

在这样的简单搜索中:

find.where('name LIKE ?', "%#{search}%")
Run Code Online (Sandbox Code Playgroud)

我明白这#{search}只是字符串插值.这些%符号有什么作用?

sql search model ruby-on-rails

8
推荐指数
2
解决办法
4384
查看次数

将ng-options值和标签绑定到ng-model

我正在使用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)

html javascript angularjs ng-options angular-ngmodel

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

Rabl.render:如何使用视图助手方法?

我正在使用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任务中的字符串渲染?)帮助器方法被用于许多次,以便按照固定的要求正确地格式化各种数据,因此很难完全删除它们.

xml ruby-on-rails view-helpers ruby-on-rails-3.2 rabl

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

Jasmine 测试 Ajax 方法间谍调用上对象的状态

我正在对一个 Angular 控制器进行单元测试,该控制器使用Rails 资源工厂来处理来自 Rails 应用程序的 GET 和 POST 模型数据。POSTing 是通过模型上的方法完成的,例如(使用 model $scope.resource):

\n\n
$scope.resource.update().then(successHandler, failureHandler);\n
Run Code Online (Sandbox Code Playgroud)\n\n

我在这个方法上有一个间谍来阻止 Ajax 调用,这样我就可以对控制器进行单元测试:

\n\n
resUpdateSpy = spyOn($scope.resource, \'update\').and.callFake(function() { \n  return {then: function(success, failure){ success(resUpdateResponse); }};\n});\n
Run Code Online (Sandbox Code Playgroud)\n\n

在我的一种控制器方法中,我希望资源与某些数据(特别是条带数据)一起发布。数据将在相同方法的 POST 后被覆盖,因此我无法在之后测试模型的状态。理想情况下,我想要这样的东西:

\n\n
expect($scope.resource.update).toHaveBeenCalled().whileValueOf($scope.resource.stripeKey).isEqualTo(\'tok123\');\n
Run 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

javascript ajax unit-testing jasmine angularjs

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

Angular 条件容器元素

我有一大块 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)

有没有办法为这种情况实现类似的非重复解决方案?

html angularjs angularjs-directive

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

在git stash pop之后撤消git reset --hard

我在尝试使用恢复的藏匿处进行了一些更改git stash pop.有一些合并冲突,而不是解决它们,我决定重置它.不幸的是,在愚蠢的时刻,我做了一个git reset --hard,现在所有以前被隐藏的变化都消失了.

有没有办法恢复这些变化?我试过了git fsck --cache --no-reflogs --lost-found --unreachable HEAD,但列出的提交哈希都没有提到我需要的更改.我还可以做些什么?还是我失去了所有这些工作?

git git-stash git-reset

4
推荐指数
1
解决办法
3845
查看次数

Rego测试:如何测试“不否认”?

我正在探索使用opa test以下简单规则来测试我的 Rego 策略:

\n\n
deny["Must be allowed"] {\n  input.allowed == "no"\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我能够在被拒绝的情况下成功测试这一点:

\n\n
test_denied_example {\n  deny with input as {"allowed":"no"}\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,当我尝试针对应该允许的情况对其进行测试时,如下所示:

\n\n
test_allowed_example {\n  not deny with input as {"allowed":"yes"}\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我收到错误:

\n\n
data.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 = _\n
Run Code Online (Sandbox Code Playgroud)\n\n

test_allowed_example除了知道这是失败的测试之外,我无法真正解析此错误消息。

\n\n

如何正确测试允许(而不是拒绝)输入的情况?

\n

testing open-policy-agent rego

4
推荐指数
1
解决办法
3241
查看次数

Rails ActionMailer 附件留空

我正在尝试使用 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

3
推荐指数
1
解决办法
1056
查看次数

Ruby类被称为方法

有没有办法定义一个类,以便您可以将该类作为执行所需代码的方法调用?例如(不起作用):

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

ruby

3
推荐指数
1
解决办法
100
查看次数

Varchar2数据类型允许systimestamp

我有一个表的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.

oracle varchar2 oracle11g systimestamp

1
推荐指数
2
解决办法
142
查看次数

为什么某些时间比较会产生违反直觉的结果呢?

在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)

为什么会这样?这是一个错误,还是我错过了什么?

ruby time ruby-2.1

0
推荐指数
1
解决办法
58
查看次数

显示属于Rails中特定条目的所有表条目

我正在开发一个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 ruby-on-rails

0
推荐指数
1
解决办法
70
查看次数