小编ger*_*rky的帖子

使用Jasmine监视构造函数

我正在使用Jasmine来测试是否创建了某些对象并调用了它们的方法.

我有一个jQuery小部件,它创建flipcounter对象并调用它们的setValue方法.flipcounter的代码在这里:https://bitbucket.org/cnanney/apple-style-flip-counter/src/13fd00129a41/js/flipcounter.js

flipcounters使用以下方式创建:

var myFlipCounter = new flipCounter("counter", {inc: 23, pace: 500});
Run Code Online (Sandbox Code Playgroud)

我想测试创建flipcounters并调用setValue方法.我的问题是如何在创建这些对象之前监视这些对象?我是否会监视构造函数并返回虚假对象?示例代码确实会有所帮助.谢谢你的帮助!:)

更新:

我已经尝试过像这样监视flipCounter了:

myStub = jasmine.createSpy('myStub');
spyOn(window, 'flipCounter').andReturn(myStub);

//expectation
expect(window.flipCounter).toHaveBeenCalled();
Run Code Online (Sandbox Code Playgroud)

然后通过flipCounter测试setValue调用:

spyOn(myStub, 'setValue');

//expectation
expect(myStub.setValue).toHaveBeenCalled();
Run Code Online (Sandbox Code Playgroud)

初始化flipCounter的第一个测试很好,但是为了测试setValue调用,我得到的是'setValue()方法不存在'错误.我这样做是对的吗?谢谢!

javascript spy jasmine

61
推荐指数
4
解决办法
6万
查看次数

bundler在哪里存储宝石?

我知道在使用时gem install,gem将存储在/home/username/.rvm/gems/下,gem下安装gem.

但是如果我使用Bundler并在Gemfile中指定gem,那么当我运行bundle install时,那些gem会被存储在哪里?如果我已经安装了gem gem install,如果我运行bundle install,它会使用之前安装的gem gem install吗?

ruby gem bundler rvm gemset

59
推荐指数
3
解决办法
3万
查看次数

jQuery Ui对话框按钮,如何添加类?

我在另一个帖子上找到了这个答案..

如何在Jquery UI对话框中添加多个按钮?

使用此语法,如何将类添加到特定按钮?

 $("#mydialog").dialog({
      buttons: {
        'Confirm': function() {
           //do something
           $(this).dialog('close');
        },
        'Cancel': function() {
           $(this).dialog('close');
        }
      }
    });
Run Code Online (Sandbox Code Playgroud)

jquery user-interface dialog jquery-ui jquery-ui-dialog

51
推荐指数
4
解决办法
6万
查看次数

多态性和鸭子打字有什么区别?

我对这两个术语感到困惑,这就是我所知道的:

多态性是通过公共接口处理不同类型的对象的能力.鸭子打字时,是一种动态类型,允许不同类型的对象响应相同的方法.

据我所知,多态性更多的是创建一个可以跨不同类共享的接口.而鸭子打字是关于松散打字,只要在消息的接收者上找到方法就可以调用方法.

它是否正确?我对两者感到很困惑,他们似乎有关系,但我不知道他们的关系是什么.非常感谢提前!

oop polymorphism duck-typing

29
推荐指数
3
解决办法
8634
查看次数

RSpec中的stub_model和mock_model有什么区别?

RSpec stub_modelmock_modelRSpec有什么区别?到目前为止,我知道存根用于防止实际方法被调用并返回预定义值,而模拟实际上是期望并且要求在接收器上调用该方法.

我也知道这些存根/模拟用于允许隔离测试,例如在控制器中而不触及模型.但我仍然对这两种方法感到困惑,究竟每种方法都使用了吗?非常感谢细节和例子.非常感谢!

rspec ruby-on-rails rspec2 rspec-rails ruby-on-rails-3

13
推荐指数
1
解决办法
5124
查看次数

Capistrano,Passenger和Nginx - 他们如何一起工作?

我目前正在使用Capistrano,Passenger和Nginx以及我的Rails应用程序,但是,我仍然对它如何一起工作感到困惑.

这是我目前所知道的:

Nginx是一个响应请求的Web服务器,比如Apache,但更轻量级.

Capistrano用于部署Web应用程序,它上载应用程序代码并运行一系列脚本并迁移数据库.

乘客对我来说是一个神秘的盒子.我知道它会产生ruby进程来处理请求,但这不是Web服务器的责任吗?我已经阅读了Passenger文档的部分内容,但它仍然没有多大意义.我可以看到它说它使部署变得轻而易举,但这不是Capistrano的作用吗?

谁能给出更好的解释?非常感谢!

capistrano passenger nginx

11
推荐指数
0
解决办法
4109
查看次数

Rails - 在使用Capistrano部署之后需要重新启动Nginx吗?

我正在使用Capistrano来部署我的Rails应用程序.每当我部署时,更改都不会反映在浏览器上,我仍然需要重新启动nginx来更新站点(运行sudo /etc/init.d/nginx restart).我不确定为什么但重启申请后不应该更新?(使用touch /app/tmp/restart.txt)

这是我的deploy.rb

require "rvm/capistrano"
set :rvm_ruby_string, 'ruby-1.9.3-p194@app_name'
set :rvm_type, :user

require "bundler/capistrano"

set :application, "app_name"
set :user, "me"

set :deploy_to, "/home/#{user}/#{application}"
set :deploy_via, :copy

set :use_sudo, false

set :scm, :git
set :repository,  "~/Sites/#{application}/.git"
set :branch, "master"

role :web, '1.2.3.4'
role :app, '1.2.3.4'
role :db,  '1.2.3.4', :primary => true
role :db,  '1.2.3.4'

namespace :deploy do
 task :start do ; end
 task :stop do ; end
 task :restart, :roles => :app, :except => { :no_release => true } do …
Run Code Online (Sandbox Code Playgroud)

capistrano ruby-on-rails passenger nginx ruby-on-rails-3

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

会话和cookie如何在Rails中运行?

我一直在使用Devise来处理我的Rails应用程序上的身份验证,但从来没有真正理解它是如何工作的.因为Devise也使用Rails上的会话存储配置集,我假设这是一个关于使用Rails进行会话处理的问题.

基本上,我是一个新手.我已经阅读了一些关于身份验证的文章,但大多数都涉及对我来说没有多大意义的抽象库(他们谈论引擎,中间件等).我真的在寻找较低级别的细节.

这是我到目前为止所知道的......

我知道cookies和会话.Cookie是存储在客户端的字符串,用于跨多个HTTP请求维护会话.

这是我对身份验证的基本理解(如果我错了,请纠正我):

  1. 当用户登录时,我们将SSL加密的请求发送到服务器.如果凭证有效,我们会在数据库(或任何其他数据存储)上保存一个名为session id的随机字符串作为与用户ID关联的有效会话ID.此会话ID会针对用户的每次登录/注销而更改.

  2. 在我们的数据存储上保存该会话ID后,我们返回一个响应,要求浏览器设置具有会话ID的cookie.然后,会发送此会话ID以及用户ID,以便连续请求到域,直到它过期.对于每个请求,我们的服务器将检查标头上的会话ID,并验证该会话ID是否对该用户标识有效.如果是,则考虑用户进行身份验证.

这是我的问题:

  1. 我从默认情况下从Rails 2开始读到它,它现在使用CookieStore(而不是SessionStore),它使用SHA512(而不是会话ID)生成会话哈希,并且所有这些都存储在cookie中,这意味着多个用户ID可以真正拥有相同的会话哈希,它会正常工作.在我看来,这是一个非常危险的事情,使用存储在服务器上的单个密钥暴露大量哈希,并基于此密钥基于整个身份验证系统.是否存在使用散列而不是存储服务器端会话ID的真实世界大规模应用程序?

  2. 关于在服务器端存储活动会话ID的主题,我还读到您可以切换为Rails使用不同类型的会话存储.基于此,我听说系统将身份验证系统作为服务移动并使用auth令牌代替.什么是身份验证令牌,它与会话ID有什么不同?

  3. 好像我可以继续猜测一个随机字符串(用于散列和服务器端会话)来获取现有会话.有没有办法防止这种情况发生?使用存储在cookie上的更多值是正常的吗?(例如用户名,真实姓名或甚至用于身份验证的其他哈希)

我知道我问了很多,但我相信这对像我这样不了解身份验证的人很有用,对于获得有关该主题的坚实基础非常有用.

authentication cookies session ruby-on-rails devise

10
推荐指数
1
解决办法
1471
查看次数

如何让Gedit看起来像Textmate?

我想让Gedit看起来像Textmate,并且也像它一样.我在网上阅读了很多教程,但找不到易于理解的指南.我正在使用Ubuntu 11.04,并希望将它用于Ruby on Rails和其他Web语言.我只想要核心功能,如类/项目浏览器和语法高亮.有人可以提供一个易于遵循的指南或指向我正确的方向?非常感谢提前!

ubuntu textmate gedit

9
推荐指数
1
解决办法
6704
查看次数

RVM查找系统gems的可执行文件

我已经安装了RVM以及ruby版本.但是,如果我启动控制台并运行命令rails服务器,捆绑安装等,我收到此错误

bash: /usr/bin/rails: /usr/bin/ruby1.8: bad interpreter: No such file or directory
Run Code Online (Sandbox Code Playgroud)

但如果我先跑rvm use 1.9.2,那一切都没问题.我尝试使用`rvm use --default 1.9.2',但没有改变.这是否意味着它使用与RVM中不同的ruby?提前致谢!

ruby rubygems ruby-on-rails apt-get rvm

8
推荐指数
1
解决办法
9639
查看次数