我最近在我的机器上更新了Cucumber宝石('cucumber'和'cucumber-rails')并遇到了几个问题.我目前正在战斗的是,Cucumber没有自动加载我的功能的任何已定义步骤.这导致我的命令行告诉我"我可以为我的功能中使用的每个步骤实现这些片段的未定义步骤的步骤定义".
我跑了:
cucumber --verbose
Run Code Online (Sandbox Code Playgroud)
......并且可以看到以下内容:
代码:*vendor/plugins/paperclip/cucumber/paperclip_steps.rb
但是,除非我指定要加载的文件,否则Cucumber不会加载任何步骤:
cucumber -r features/step_definitions/web_steps.rb
Run Code Online (Sandbox Code Playgroud)
我认为这可能只是我在我的应用程序结构中的"step_definitions"文件夹中创建的自定义步骤文件,但它似乎也没有加载标准的"web_steps"文件.
非常感谢任何遇到过这个问题的人或者知道为什么会这样.
谢谢.
我在Redis中使用两个有序集.在某一点上,我需要过期set 1,重命名set 2为set 1.这删除set 2.然后我需要复制set 1以重新创建set 2为副本.这可能吗?
我在Redis文档中发现了zunionstore,但我不确定它是我追求的.
我正在开发一个具有多个音乐播放列表的应用程序,每个播放列表和播放器的视图.
我已经在我的系统中使用HTML5历史记录API(用于其他功能),并将进一步使用它来防止请求之间的页面重新加载,从而停止每页上的音乐.
我仍然坚持管理玩家将在视图之间播放的曲目的最佳方法.目前,正如您所料,用户点击链接,获取曲目列表.曲目被加载到播放器中并按顺序播放,简单.然而,随着连续播放音乐,我需要确保正确播放曲目的播放列表,尽管页面上的内容不断变化,现在它是动态URL.
然而,当用户确实导航到另一页面时,按下在新播放列表中的轨道上播放,我需要能够将该项目加载到播放器中并在用户继续导航时有效地加载到播放列表的其余部分.
我正在使用Redis存储播放列表的曲目ID列表,以便快速参考以减少曲目之间的延迟.因此,我为每个播放列表设置了不同的Redis.我还根据当前曲目播放构建了我的Next和Previous Track API调用,以便Redis集中的下一首曲目可以加载到播放器中.
如上所述,虽然我无法决定引用哪个播放列表当前正在播放的最佳方式,因此播放器知道哪个Redis设置为从中调用音轨.我的想法给我留下了一些不同的想法:
a)HTML5自定义数据属性 - 我可以将当前播放的播放列表设置为播放器上的数据属性,并在何时更新.然后我可以在决定哪个Redis设置为加载我的下一个曲目时引用此属性.
或者,我可以将当前播放列表以及所有轨道(及其属性)作为JSON对象转储到页面上的数据属性中.播放列表可能长达数千首曲目但是因为源代码看起来很糟糕,更不用说可能出现的性能问题了.我对吗?
b)LocalStorage - 跨浏览器支持有限.在这种特殊情况下,对此解决方案的支持越多越好.尽管如此,我可以在用户浏览器中保存当前播放列表.这让我想知道在LocalStorage中保存跟踪JSON对象是否也是可行的,以防止额外的数据库调用.
c)在会话中 - 我可以更新会话以存储当前正在播放的播放列表的变量.
d)Redis - 我可以扩展我对Redis的使用,以保存一个引用当前播放列表名称的字符串.然后我可以在每个下一个/上一个跟踪呼叫之间进行检查.
通过写这个问题,我已经更好地了解了我将要采取的路线,但如果有人对这种情况有任何建议,那么我很乐意听取.
谢谢.
更新:我已经实现了95%的使用Redis的解决方案.虽然页面需要大约10秒才能加载,但我遇到了一些性能问题.一点也不好.
基本上每个用户都有2个播放列表:Current和Armed.每个请求都会将轨道ID加载到Redis Armed播放列表中,如果在轨道上按下播放按钮,则当前Redis播放列表将过期并替换为Armed播放列表.
然后,我的下一个和上一个按钮只需获取当前播放列表中下一首或上一首曲目的ID,然后加载播放器的音乐源.这个概念很好用,我很满意.
但是,如上所述,页面请求之间的性能很慢,需要显着改进.我的SQL被优化了,我只是提取所需的属性,并且我有必要的SQL索引,所以我正在寻找其他替代方案.
我正在考虑的选项:
如果在新页面上单击了某个曲目,则仅填充"武装"播放列表.如果用户实际上不想收听其中一个新曲目,这将节省额外的处理.
更多地使用Redis并将精益轨道对象存储在Redis播放列表中而不仅仅是轨道ID中 - 性能滞后主要在页面请求之间,而不是在实际播放轨道和导航播放列表中.
使用Redis主播放列表,其中包含Current和Armed播放列表可以从中选择的所有应用程序轨道.这可以通过每小时的rake任务来维护,并且可以防止对页面请求进行冗长的DB调用.我只是担心这会在服务器上的内存使用量和数据库中的磁道数量方面达到多大程度.
当我使用回形针将我的语音模型添加以下验证时,正在努力锻炼,当我尝试上传mp3时会触发它:
class Voice < ActiveRecord::Base
has_attached_file :clip
validates_attachment_presence :clip
validates_attachment_content_type :clip, :content_type => [ 'application/mp3', 'application/x-mp3', 'audio/mpeg', 'audio/mp3' ],
:message => 'file must be of filetype .mp3'
validates_attachment_size :clip, :less_than => 10.megabytes
validates_presence_of :title
end
Run Code Online (Sandbox Code Playgroud)
我尝试了许多不同的mp3文件,但似乎没有上传,因为验证失败了.
我有一个问题设置Rails has_many:通过:多态关系.
我知道这个主题在SO上有很好的 文档,但我认为我的问题取决于我的模型和foreign_key名称,而不是语法,即我认为这是"我一直在看代码太长"的问题,只需要另一个一双眼睛.
无论如何,我有以下设置:
class Milestone < ActiveRecord::Base
has_many :responsible_items, :as => :responsibility
has_many :responsible, :through => :responsible_items
end
class ResponsibleItem < ActiveRecord::Base
belongs_to :responsible, :class_name => "User"
belongs_to :responsibility, :polymorphic => true
end
class User < ActiveRecord::Base
has_many :responsible_items, :foreign_key => :responsible_id
has_many :responsibilities, :through => :responsible_items
end
Run Code Online (Sandbox Code Playgroud)
从里程碑方面来看,这似乎没有错误.例如在终端我可以写:
Milestone.first.responsible
Run Code Online (Sandbox Code Playgroud)
......按照我的预期得到一个空集合.
但是,从用户方面来说,运行:
User.first.responsibilities
Run Code Online (Sandbox Code Playgroud)
...正在返回AR错误:
ActiveRecord::HasManyThroughAssociationPolymorphicSourceError: Cannot have a has_many :through association 'User#responsibilities' on the polymorphic object 'Responsibility#responsibility'.
Run Code Online (Sandbox Code Playgroud)
我假设这个问题与我将用户关系称为:负责人这一事实有关.这是正确的吗?
任何帮助将不胜感激,谢谢.
我有一个 React 组件,我正在为其编写一些测试。我想测试一下,当div组件中的 a 滚动时,它会触发侦听该事件的函数onScroll. 不幸的是,酶simulate('click')似乎并没有spy像我期望的那样调用我的函数。
import React from 'react';
import ReactDOM from 'react-dom';
import jQuery from 'jquery';
const $ = jQuery;
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.handleScroll = this.handleScroll.bind(this);
}
handleScroll(event) {
return true;
}
render() {
return(
<div className="my-component" onScroll={this.handleScroll}>
<h1>Hello world</h1>
</div>
);
}
}
export default MyComponent;
Run Code Online (Sandbox Code Playgroud)
import { expect } from 'chai';
import { shallow, mount, render } from 'enzyme';
import { …Run Code Online (Sandbox Code Playgroud) redis ×2
ruby ×2
architecture ×1
cucumber ×1
electron ×1
enzyme ×1
html5 ×1
javascript ×1
mocha.js ×1
mp3 ×1
paperclip ×1
reactjs ×1
testing ×1
validation ×1