在新创建的Rails项目(由...生成rails someName)上,可以运行一些"默认"rake任务,例如:
rake testrake db:migrate问题是,这些任务在哪里被描述?默认情况下Rakefile没有所有这些任务.
此外,我检查了一些使用的项目,rspec我可以运行rake spec以运行所有测试.spec目标在哪里定义?
我已经通过了水豚的帖子+点击提示框,但似乎没有任何工作.以下是我的情景:
场景:当我单击更新按钮时出现一个警告框,其中包含"确定"和"取消"按钮.单击"确定",然后出现新表单.
我正在编写请求规范,即使用rspec和capybara.主要问题是单击警告框:以下是我的代码:
context "update" do
before(:all) do
Capybara.current_driver = :selenium
end
after(:all) do
Capybara.use_default_driver
end
it "update user to trainer" do
click_button('Search')
sleep 3
page.evaluate_script('data-confirm = function() { return true; }')
page.click('OK')
click_button('Upgrade')
end
end
Run Code Online (Sandbox Code Playgroud)
但执行脚本会给我以下错误:
失败/错误:page.evaluate_script('data-confirm = function(){return true;}')Selenium :: WebDriver :: Error :: UnexpectedJavascriptError:左侧无效赋值#./ spec/summary/user_upgrades_spec.rb :30
对于第二个例子即
page.driver.browser.switch_to.alert.accept
我的代码:
context "update" do
before(:all) do
Capybara.current_driver = :selenium
end
after(:all) do
Capybara.use_default_driver
end
it "update user to trainer" do
click_button('Search')
sleep 3
click_button('Upgrade')
page.driver.browser.switch_to.alert.accept
end
end
Run Code Online (Sandbox Code Playgroud)我收到错误: …
我正在尝试从我的控制器规范中设置会话对象.
it 'use invalid coupon' do
session[:coupon] = 'abcd'
Service.any_instance.stub(:validate_coupon).with(session[:coupon]).and_return('abcd')
get :index
expect(flash[:coupon__notice]).to be nil
end
Run Code Online (Sandbox Code Playgroud)
但是当我检查会话而不是@coupon对象时,我得到一个包含字符串'coupon'的@data,并且测试失败.
我在使用Chrome在Ubuntu 13.10 64位上使用RSpec/Capybara时遇到了一些麻烦.默认情况下它启动Firefox - 我们试图通过多种方式改变它,包括:
http://actsasblog.ca/2011/09/28/how-to-use-chrome-with-capybara/
/home/.../xxx_spec.rb:8:in `<top (required)>': undefined local variable or method `“chromedriver”' for main:Object (NameError)
我们还尝试过:
require 'capybara/rspec'
require 'rspec'
require 'selenium-webdriver'
Capybara.register_driver :selenium do |app|
Capybara::Selenium::Driver.new(app, :browser => :chrome)
end
Run Code Online (Sandbox Code Playgroud)
/home/ubuntu/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/selenium-webdriver-2.39.0/lib/selenium/webdriver/chrome/service.rb:50:in `start': unable to connect to chromedriver http://127.0.0.1:9515 (Selenium::WebDriver::Error::WebDriverError)
使用Chrome需要另外一步吗?我是Selenium的新手.
这是一个让我困扰了一段时间的人,虽然回想起来应该是显而易见的.我收到了错误消息
NoMethodError: undefined method `constantize' for 0:Fixnum
Run Code Online (Sandbox Code Playgroud)
通过多态关联访问模型时 原来belongs_to关联一侧的表有一个整数type列而不是一个字符串.
很容易修复,但似乎Rails应该在这种情况下引发错误 - 相反,它很乐意在类型列中添加0行.
我想只为Emacs创建一个突出显示次要模式的语法.我有O'Reilly的"编写GNU Emacs Extensions",但它没有深入细节.是否有一个简单的教程,用于真实或伪造的编程语言高亮模式?
谢谢
假设我有一个用户拥有并属于许多角色的关联.当我销毁用户时,连接表中的记录是否也会被自动删除?或者我需要使用:dependent =>:destroy?如果我摧毁一个角色怎么办?
class User < ActiveRecord::Base
has_and_belong_to_many :roles # need to use :dependent => :destroy to remove join record?
end
class Role < ActiveRecord::Base
has_and_belong_to_many :users # need to use :dependent => :destroy to remove join record?
end
Run Code Online (Sandbox Code Playgroud) 我刚刚开始记录rails应用程序.我知道这实际上是由rdoc完成的,所以我遵循了一些关于语法的rdoc指南等等,但当我试图描述模型的属性,验证和模型之间的关系时,我陷入困境,主要是因为这些东西都是ActiveRecord的一部分.所以我想知道是否有一些关于如何记录rails应用程序的指南或良好实践,或者是否有我遗漏的东西?
我知道我可以把所有这些都放在类描述中,但是我想知道是否有一种方法与声明本身(has_many,validates_presence_of等)更紧密地联系在一起,那么属性呢?
到目前为止的故事:
我有一个名为"Term"的模型的rails应用程序.一切都很顺利,直到尝试安装Cucumber.跑步时
rake cucumber
Run Code Online (Sandbox Code Playgroud)
我明白了
Term is not a class (TypeError)
Run Code Online (Sandbox Code Playgroud)
这是因为Cucumber包含另一个gem,'term-ansicolor'(在控制台中执行漂亮的彩色文本输出),term-ansicolor定义了一个名为"Term"的模块.在包含Rails模型之前,Cucumber包括term-ansicolor,因此在加载"Term"模型时,"Term"已被定义为模块.顶级模块和类在Ruby中不能具有相同的名称,因此发生冲突.
我不想重命名模型,而是开始修补term-ansicolor gem.事实证明这比我想象的更难.我将Term模块名称更改为"ANSITerm",但我无法弄清楚如何让Cucumber加载我修改过的gem,我已将其放入RAILS_ROOT/vendor/gems/term-ansicolor.
有任何想法吗?我吠叫错了树吗?
我理解什么是线程框架(Rails,Django,Symfony2,...).我理解事件驱动的框架是什么(Node.js,EventMachine,Twisted,...)以及为什么它对于实时,聊天,速度......而言非常好.此外,它们似乎不会对正常用例造成问题.所以: