当我简单地使用
assert_select td, "test"
似乎它期望找到的第一个 td 元素具有值测试。
所以我尝试首先选择数组中的所有内容,然后假设该数组包含预期值:
assert_select 'td' do |elements|
assert elements.include?("test")
end
Run Code Online (Sandbox Code Playgroud)
但这对我来说也不起作用,因为它始终是绿色的。我不太确定 Rails 和 Ruby 的哪些部分在测试中可用,所以最后一个想法只是一个猜测。
我有一个模型“政策”。在该模型中,我对保单持有人和保费金额进行了存在验证。我正在尝试为此模型编写一个 MiniTest 测试。由于某种原因,我的测试失败了。
这是我的模型:
class Policy < ApplicationRecord
belongs_to :industry
belongs_to :carrier
belongs_to :agent
validates :policy_holder, presence: true
validates :premium_amount, presence: true
end
Run Code Online (Sandbox Code Playgroud)
这是我的测试:
require 'test_helper'
class PolicyTest < ActiveSupport::TestCase
test 'should validate policy holder is present' do
policy = Policy.find_or_create_by(policy_holder: nil, premium_amount: '123.45',
industry_id: 1, carrier_id: 1,
agent_id: 1)
assert_not policy.valid?
end
test 'should validate premium amount is present' do
policy = Policy.find_or_create_by(policy_holder: 'Bob Stevens', premium_amount: nil,
industry_id: 1, carrier_id: 1,
agent_id: 1)
assert_not policy.valid?
end
test 'should be …Run Code Online (Sandbox Code Playgroud) 我在 Rails Minitest 中遇到permit强参数错误。当我运行正常流程时(除了测试),这工作得很好。 每当我运行测试时,它都会给我这个奇怪的错误。
为什么这仅在测试时不起作用
parameter
@params_return_type = {:client_notes_and_action_items=>[{"notes_action_type"=>"return_help", "title"=>"test title", "description"=>"", "to_do_action_items_attributes"=>{"0"=>{"linked_item_id"=>"987", "linked_item_type"=>"client_purchases_shipping_detail", "initial_request"=>"true"}}, "estimated_completion"=>'Mon, 30 Mar 2020', "assigned_to"=>"45", "assigned_by"=>"41"}],"client_id"=>"76576"}
Run Code Online (Sandbox Code Playgroud)
运行测试时出错
NoMethodError: undefined method `permit' for #<Hash:0x007facebc78c98>
Run Code Online (Sandbox Code Playgroud)
你的意思?打印
this is my strong parameter
私人的
def self.client_notes_and_action_item_params(params)
params.permit( :client_id, :notes_action_type, :category, :description, :user_id, :image,
:comments, :status, :estimated_completion, :actual_completion, :title,
to_do_action_items_attributes: [:id, :linked_item_id, :linked_item_type, :deleted,
:initial_request])
end
Run Code Online (Sandbox Code Playgroud)
我的api代码是这样的
params[:client_notes_and_action_items].each do |client_notes_and_action_item|
ClientNotesAndActionItem.transaction do
action_item = ClientNotesAndActionItem.new(client_notes_and_action_item_params(client_notes_and_action_item))
Run Code Online (Sandbox Code Playgroud)
代码在代码的最后一行中断
任何想法是什么问题。如果强参数是一个问题,那么我应该对所有参数都出现此错误,正常流程仅在 Minitest 测试中断时工作正常。
使用ruby1.9.2 rails3.1.0
我在上网本工作,所以这不是我通常的开发环境.我本周早些时候克隆了一个我在桌面上工作的回购.现在,当我运行时,我rake test在终端中收到此错误.
^[[1;5C/home/work/.rvm/gems/ruby-1.9.2-p290@rails310/gems/rack-1.3.4/lib/rack/backports/uri/common_192.rb:53: warning: already initialized constant WFKV_
/home/work/.rvm/gems/ruby-1.9.2-p290@rails310/gems/turn-0.8.3/lib/turn/autorun/minitest.rb:14:in `<top (required)>': MiniTest v1.6.0 is out of date. (RuntimeError)
`gem install minitest` and add `gem 'minitest' to you test helper.
from /home/work/.rvm/gems/ruby-1.9.2-p290@rails310/gems/activesupport-3.1.0/lib/active_support/dependencies.rb:240:in `require'
from /home/work/.rvm/gems/ruby-1.9.2-p290@rails310/gems/activesupport-3.1.0/lib/active_support/dependencies.rb:240:in `block in require'
from /home/work/.rvm/gems/ruby-1.9.2-p290@rails310/gems/activesupport-3.1.0/lib/active_support/dependencies.rb:225:in `load_dependency'
from /home/work/.rvm/gems/ruby-1.9.2-p290@rails310/gems/activesupport-3.1.0/lib/active_support/dependencies.rb:240:in `require'
from /home/work/.rvm/gems/ruby-1.9.2-p290@rails310/gems/turn-0.8.3/lib/turn.rb:13:in `<top (required)>'
from /home/work/.rvm/gems/ruby-1.9.2-p290@rails310/gems/activesupport-3.1.0/lib/active_support/dependencies.rb:240:in `require'
from /home/work/.rvm/gems/ruby-1.9.2-p290@rails310/gems/activesupport-3.1.0/lib/active_support/dependencies.rb:240:in `block in require'
from /home/work/.rvm/gems/ruby-1.9.2-p290@rails310/gems/activesupport-3.1.0/lib/active_support/dependencies.rb:225:in `load_dependency'
from /home/work/.rvm/gems/ruby-1.9.2-p290@rails310/gems/activesupport-3.1.0/lib/active_support/dependencies.rb:240:in `require'
from /home/work/.rvm/gems/ruby-1.9.2-p290@rails310/gems/railties-3.1.0/lib/rails/test_help.rb:19:in `<top (required)>'
from /home/work/.rvm/gems/ruby-1.9.2-p290@rails310/gems/activesupport-3.1.0/lib/active_support/dependencies.rb:240:in `require'
from /home/work/.rvm/gems/ruby-1.9.2-p290@rails310/gems/activesupport-3.1.0/lib/active_support/dependencies.rb:240:in `block in require'
from /home/work/.rvm/gems/ruby-1.9.2-p290@rails310/gems/activesupport-3.1.0/lib/active_support/dependencies.rb:225:in `load_dependency' …Run Code Online (Sandbox Code Playgroud) 如何测试Rails中控制器操作的响应是否为文件?(机架测试或水豚)
我应该使用单元测试吗?
场景很简单:我必须测试来自数据库的导出用户是否与动作生成的.csv中包含的用户相同.
请帮忙:
我想用minitest用户.
这是我得到的例外:
NoMethodError: undefined method `run_teardown_hooks' for #<#<Class:0x007fd42ed95490>:0x007fd42ed00c78>
/Users/boti/.rvm/gems/ruby-1.9.2-p180@search_server/gems/mocha-0.10.5/lib/mocha/integration/mini_test/version_230_to_262.rb:39:in `run'
/Users/boti/.rvm/gems/ruby-1.9.2-p180@search_server/gems/activesupport-3.2.11/lib/active_support/testing/setup_and_teardown.rb:36:in `block in run'
/Users/boti/.rvm/gems/ruby-1.9.2-p180@search_server/gems/activesupport-3.2.11/lib/active_support/callbacks.rb:425:in `_run__1339649173504478165__setup__555511959301366683__callbacks'
/Users/boti/.rvm/gems/ruby-1.9.2-p180@search_server/gems/activesupport-3.2.11/lib/active_support/callbacks.rb:405:in `__run_callback'
/Users/boti/.rvm/gems/ruby-1.9.2-p180@search_server/gems/activesupport-3.2.11/lib/active_support/callbacks.rb:385:in `_run_setup_callbacks'
/Users/boti/.rvm/gems/ruby-1.9.2-p180@search_server/gems/activesupport-3.2.11/lib/active_support/callbacks.rb:81:in `run_callbacks'
/Users/boti/.rvm/gems/ruby-1.9.2-p180@search_server/gems/activesupport-3.2.11/lib/active_support/testing/setup_and_teardown.rb:35:in `run'
Run Code Online (Sandbox Code Playgroud)
这是我的gemfile:
gem 'minitest'
gem 'minitest-should_syntax'
gem 'miniskirt'
gem 'rack-livereload'
gem 'guard'
gem 'guard-minitest'
gem 'guard-bundler'
gem 'guard-livereload'
gem 'annotate', ">=2.5.0"
gem 'guard-annotate'
gem "rb-fsevent"
gem 'database_cleaner'
gem "minitest-rails-shoulda"
gem 'sqlite3', :require => 'sqlite3'
Run Code Online (Sandbox Code Playgroud)
这是我的test_helper:
ENV["RAILS_ENV"] = "test"
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
require 'minitest/autorun'
require 'minitest/should_syntax'
require 'factories/factories'
class ActionController::TestCase
include Devise::TestHelpers
end
Run Code Online (Sandbox Code Playgroud) 我有一个我正在研究的博客,我添加了一些javascript,以便在您点击新帖子时弹出博客的表单.一切正常.我使用minitest和capybara进行测试,我安装了gem selenium-webdriver,当我在本地测试时,一切正常.但是,当我推送到Github并且travis-ci接收我的信息并运行我的测试时,它给了我这个错误
unable to obtain stable firefox connection in 60 seconds (127.0.0.1:7055)
Run Code Online (Sandbox Code Playgroud)
我有点困惑,因为我在本地得到了这个错误,直到我更新到gem selenium-webdriver到版本2.39.0.我刚刚下载了firefox,据我所知,一切都是最新的.这是我的一些文件,如果这有帮助.
我的考试
feature "as a student I want a working blog so people can post" do
# this is line 10
scenario "User can make a post", :js => true do
dude_sign_up
dude_log_in
visit posts_path
click_on "New Post"
create_post
page.must_have_content "Post was successfully created"
end
# this is line 19
Run Code Online (Sandbox Code Playgroud)
的Gemfile
group :development, :test do
gem 'sqlite3'
gem 'minitest-rails'
gem 'launchy'
gem 'coveralls', require: false
gem 'minitest-rails-capybara' …Run Code Online (Sandbox Code Playgroud) ruby-on-rails minitest capybara travis-ci selenium-webdriver
我在使用Minitest的Ruby应用程序中开始使用DDD和TDD.我创建了一个存储库类(没有数据库访问,但它为我生成了实体).这是一个单身人士.
我想测试实体的生成.问题是因为它是一个单例,测试的执行顺序会影响结果.
有没有办法强制处理单身元素,使其"新鲜"?
这是我的存储库代码:
require "singleton"
class ParticipantRepository
include Singleton
def initialize()
@name_count = 0
end
def generate_participant()
participant = Participant.new
participant.name = "Employee#{get_name_count()}"
return participant
end
private
def get_name_count()
old_name_count = @name_count
@name_count += 1
return old_name_count
end
end
Run Code Online (Sandbox Code Playgroud)
测试:
require_relative 'test_helper'
class ParticipantRepositoryTest < MiniTest::Unit::TestCase
def setup()
@repository = ParticipantRepository.instance
end
def test_retrieve_participant
participant = @repository.generate_participant
refute_nil participant
refute_nil participant.name
refute_equal("", participant.name)
assert_equal(0, participant.subordinates_count)
end
def test_employee_name_increment
participant1 = @repository.generate_participant
participant2 = @repository.generate_participant
refute_equal(participant1.name, participant2.name)
index_participant1 = /Employee([0-9]+)/.match(participant1.name)[1] …Run Code Online (Sandbox Code Playgroud) 我可以这样stub的方法:
def test_stale_eh
obj_under_test = Something.new
refute obj_under_test.stale?
Time.stub :now, Time.at(0) do
assert obj_under_test.stale?
end
end
Run Code Online (Sandbox Code Playgroud)
来自http://www.rubydoc.info/gems/minitest/4.2.0/Object:stub
但我找不到如何使用参数存根方法的信息.例如,如果我想存根Time.parse方法,我该怎么写呢?
我正在使用Rails 5.我有这个文件,config/environment_variables.yml
development:
COINBASE_KEY: devkey
COINBASE_SECRET: devsecret
test:
COINBASE_KEY: testkey
COINBASE_SECRET: testsecret
production:
COINBASE_KEY: prodkey
COINBASE_SECRET: prodsecret
Run Code Online (Sandbox Code Playgroud)
我用文件config/initializers/environment_variables.rb加载它
module EnvironmentVariables
class Application < Rails::Application
config.before_configuration do
env_file = Rails.root.join("config", 'environment_variables.yml').to_s
if File.exists?(env_file)
YAML.load_file(env_file)[Rails.env].each do |key, value|
ENV[key.to_s] = value
end # end YAML.load_file
end # end if File.exists?
end # end config.before_configuration
end # end class
end # end module
Run Code Online (Sandbox Code Playgroud)
但是当我使用我的测试时
rails test test/services/crypto_currency_service_test.rb
Run Code Online (Sandbox Code Playgroud)
测试变量没有加载 - 而是来自开发环境的加载.下面是我的测试文件
require 'coinbase/wallet'
require 'minitest/mock'
class CryptoCurrencyServiceTest < ActiveSupport::TestCase
test 'sell' do
last_transaction = …Run Code Online (Sandbox Code Playgroud) testing ruby-on-rails environment-variables minitest ruby-on-rails-5