我正在尝试用rspec,factory_girl和capybara编写集成测试.我也安装了黄瓜,但我没有使用它(据我所知).
我基本上想用我的用户预填充数据库,然后转到我的主页并尝试登录.它应该重定向到user_path(@user).
但是,我的/ rspec/requests/integration测试似乎没有持久化会话.
我的规范:/rspec/requests/users_spec.rb
require 'spec_helper'
describe "User flow" do
before(:each) do
@user = Factory(:user)
end
it "should login user" do
visit("/index")
fill_in :email, :with => @user.email
fill_in :password, :with => @user.password
click_button "Login"
assert current_path == user_path(@user)
end
end
Run Code Online (Sandbox Code Playgroud)
返回:
Failures:
1) User flow should login user
Failure/Error: assert current_path == user_path(@user)
<false> is not true.
# (eval):2:in `send'
# (eval):2:in `assert'
# ./spec/requests/users_spec.rb:16
Run Code Online (Sandbox Code Playgroud)
相反,它会重定向到我的please_login_path - 如果登录因任何原因失败(或者如果未设置session [:user_id]),则会发生这种情况.
如果我尝试放入session.inspect,它将作为一个nil对象失败.
如果我尝试在控制器测试中执行此操作(/rspec/controllers/sessions_spec.rb),我可以毫无问题地访问会话,并且我可以调用session [:user_id]
我正在创建一个CourseEnrollment模型,每当用户查看课程时,我想用当前时间戳更新数据库.我应该只更新现有的updated_at字段还是为模型创建一个单独的字段?
我刚读过REST实践:超媒体和系统架构这本书,现在我正在尝试一些想法,但无法弄清楚是否在我的响应文档中使用绝对或相对URI.
我更喜欢abosulte URI,但可以看到在进入生产时会出现问题,其中带有负载均衡器的服务器基础架构,apache重写,以及Tomcat服务器将覆盖原始URI并弄乱我的URI生成机制,信息等因为方案和上下文路径在它访问Java代码时将被重写或丢失,并且从客户端的角度来看URI将是不正确的.
然后我想尝试使用相对URI,但这是一个好主意还是错误的转向?
本书坚持使用绝对URI,但我找不到任何关于此的提及.马丁福勒写了关于理查森成熟度模型的文章,他正在使用相对URI.
你怎么看?优点缺点?
我正在努力理解与existsHaskell类型系统相关的关键字.据我所知,默认情况下Haskell中没有这样的关键字,但是:
data Accum a = exists s. MkAccum s (a -> s -> s) (s -> a)exists关键字对于类型系统是不必要的,因为它可以通过forall但我甚至不明白是什么exists意思.
当我说,forall a . a -> Int这意味着(在我的理解中,不正确的一个,我猜)"对于每个(类型)a,都有一个类型的函数a -> Int":
myF1 :: forall a . a -> Int
myF1 _ = 123
-- okay, that function (`a -> Int`) does exist for any `a`
-- because we have just defined it
Run Code Online (Sandbox Code Playgroud)
当我说exists a . a -> …
一直在乱砍几个库,并遇到一个字符串被"双重逃脱"的问题.
例如: 固定示例
> x = ['a']
=> ["a"]
> x.to_s
=> "[\"a\"]"
>
Run Code Online (Sandbox Code Playgroud)
然后再来
\"\[\\\"s\\\"\]\"
Run Code Online (Sandbox Code Playgroud)
在处理http标头时发生了这种情况.我有一个标题,它将是一个数组,但http库正在对array.to_s值进行自己的字符转义.
我发现的解决方法是将数组转换为字符串,然后"撤消"to_s.像这样:formatted_value = value.to_s
if value.instance_of?(Array)
formatted_value = formatted_value.gsub(/\\/,"") #remove backslash
formatted_value = formatted_value.gsub(/"/,"") #remove single quote
formatted_value = formatted_value.gsub(/\[/,"") #remove [
formatted_value = formatted_value.gsub(/\]/,"") #remove ]
end
value = formatted_value
Run Code Online (Sandbox Code Playgroud)
......有一个更好的方法......(不需要修补我正在使用的宝石).(是的,如果我的字符串实际上包含那些字符串,那么这个休息.)
建议?
**更新2**
好的.在这个街区仍然有麻烦,但现在我想我已经找到了核心问题.在to_s调用之后,它将我的数组序列化为json.至少,这似乎正在复制我所看到的.
[ 'A'].to_s.to_json
我正在调用一个返回to_s结果的gem中的方法,然后我在它上面调用to_json.
我可以让gdb自动加载核心文件中指定的二进制文件吗?
鉴于我现在通常做的核心文件:
gdb -c corefile
GNU gdb 6.8
...
Core was generated by `/path/to/binary'
Run Code Online (Sandbox Code Playgroud)
然后我复制粘贴并运行:
gdb -c corefile /path/to/binary
Run Code Online (Sandbox Code Playgroud)
这似乎是一个不必要的两步过程,但我没有看到基于手册页这样做的明显方法.我错过了什么吗?
我知道以下是阻塞调用,并将返回可观察序列中的第一个值:
var result = myObservable.First();
Run Code Online (Sandbox Code Playgroud)
根据我使用的主题类型,这有不同的含义:
现在我试图找到一种获取最后一个值的一致方法,无论使用哪个底层Observable.
有任何想法吗?
我想禁用一个可调整大小的属性textarea.
目前,我可以textarea通过单击右下角textarea并拖动鼠标来调整大小.我怎么能禁用它?
我正在尝试构建一个适用于任何地方的视频播放器.到目前为止我要去:
<video>
<source src="video.mp4"></source>
<source src="video.ogv"></source>
<object data="flowplayer.swf" type="application/x-shockwave-flash">
<param name="movie" value="flowplayer.swf" />
<param name="flashvars" value='config={"clip":"video.mp4"}' />
</object>
</video>
Run Code Online (Sandbox Code Playgroud)
(如在几个网站上看到的,例如每个人的视频)到目前为止,非常好.
但现在我也想要一些播放列表/菜单以及视频播放器,我可以从中选择其他视频.那些应该马上在我的播放器中打开.所以我将不得不"动态改变视频的来源"(见dev.opera.com/articles/everything-you-need-to-know-html5-video-audio/ - section"让我们来看看另一部电影")用javascript.让我们暂时忘记flashplayer(以及IE)部分,我将稍后尝试处理.
所以我的JS改变<source>标签应该是这样的:
<script>
function loadAnotherVideo() {
var video = document.getElementsByTagName('video')[0];
var sources = video.getElementsByTagName('source');
sources[0].src = 'video2.mp4';
sources[1].src = 'video2.ogv';
video.load();
}
</script>
Run Code Online (Sandbox Code Playgroud)
问题是,这在所有浏览器中都不起作用.即,firefox = O有一个很好的页面,你可以在那里观察我遇到的问题:http://www.w3.org/2010/05/video/mediaevents.html
一旦我触发load()方法(在Firefox中,请注意),视频播放器就会死机.
现在我发现当我不使用多个<source>标签,而只是标签中的一个src属性时<video>,整个事情都可以在firefox中运行.
所以我的计划是使用该src属性并使用canPlayType()函数确定适当的文件.
我是以某种方式做错了还是让事情变得复杂?