标签: minitest

如何测试(Minitest)(Rails)视图包含带有特定文本的 <td> 元素?

当我简单地使用

assert_select td, "test"

似乎它期望找到的第一个 td 元素具有值测试。

所以我尝试首先选择数组中的所有内容,然后假设该数组包含预期值:

assert_select 'td' do |elements|
  assert elements.include?("test")
end
Run Code Online (Sandbox Code Playgroud)

但这对我来说也不起作用,因为它始终是绿色的。我不太确定 Rails 和 Ruby 的哪些部分在测试中可用,所以最后一个想法只是一个猜测。

ruby-on-rails minitest

3
推荐指数
1
解决办法
2038
查看次数

MiniTest 模型验证测试失败

我有一个模型“政策”。在该模型中,我对保单持有人和保费金额进行了存在验证。我正在尝试为此模型编写一个 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)

testing ruby-on-rails minitest

3
推荐指数
1
解决办法
1339
查看次数

NoMethodError:Rails Minitest 中 #&lt;Hash:0x007facebc78c98&gt; 未定义方法“permit”

我在 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 测试中断时工作正常。

ruby-on-rails minitest strong-parameters ruby-on-rails-4

3
推荐指数
1
解决办法
2747
查看次数

在rails中运行测试时如何处理此错误?

使用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)

ruby-on-rails minitest

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

如何检查响应是否是文件?

如何测试Rails中控制器操作的响应是否为文件?(机架测试或水豚)

我应该使用单元测试吗?

场景很简单:我必须测试来自数据库的导出用户是否与动作生成的.csv中包含的用户相同.

tdd ruby-on-rails testunit minitest rack-test

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

使用minitest的minitest-rails-shoulda给了我未定义的方法`run_teardown_hooks'

请帮忙:

我想用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)

shoulda minitest

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

travis ci和selenium-webdriver无法在60秒内获得稳定的firefox连接(127.0.0.1:7055)

我有一个我正在研究的博客,我添加了一些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

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

我如何测试(TDD)单例类?

我在使用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)

ruby tdd minitest

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

如何在MiniTest中使用参数存根方法

我可以这样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方法,我该怎么写呢?

ruby minitest

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

当我运行测试时,如何让Rails加载我的测试环境变量?

我正在使用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

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