2017-02-01 64 views
1

修復模型試驗&原始測試底部有迷你測試

我有哪些格式完全相同兩次型試驗,但只有一個作品。我是全新的微型測試或一般測試。我還閱讀了迷你測試&的問題列表,但沒有足夠的技能或理解來找到可以解決發佈的不同問題的修復方案。

目標:的工作在我CampplayTest.rb文件.valid?,或者爲什麼它的失敗&的理解它的位置(如色器件的blowmage說.valid我應該用什麼應該到位.save的使用嗎?! )

編輯:顯然,這是我的模型 - 不知道怎麼說是無效的 - 見下文

失敗這裏測試文件原來的錯誤...

require 'test_helper' 

class CampplayTest < ActiveSupport::TestCase 

    # Test one missing from pair of ID 
    test 'invalid - no campaign' do 
    county = campplay.new(player_id: 1) 
    refute county.valid?, 'Campplay passed without a name' 
    end 

end 

通過測試文件在這裏...

require "test_helper" 

class County_Test < ActiveSupport::TestCase 
    def setup 
    @county = County.create(name: "Example Item") 
    end 
test 'valid county' do 
    assert @county.valid?, 'county must have name' 
    end 

    # Test duplicate 
    test 'invalid - duplicate county' do 
    county = County.new(name: "Example Item") 
    refute county.valid?, 'county passed without a name' 
    end 

end 

我想...

  1. 結算運行只是用3條繼承路徑爲rails c test
  2. 單獨測試夾具test_helper.rb
  3. 切換到測試文件中的integeration測試助手自行宣佈
  4. 使用設置功能
  5. 多元化用手&由具有系統吐出了多元化的Campplay
  6. Capitolizing
  7. 使用.save!在rails c & rails c test
  8. 改變rails generate test_unit:model article title:string body:text例子&的Fileds符合我的模型rails generate test_unit:model Campplay campaign_id:integer player_id:integer
  9. 在測試文件更改測試文件名&類名來Campplay_Test

我的錯誤信息......

2.3.1 :006 >  c = Campplay.new(player_id: "1", campaign_id: "1")                         
=> #<Campplay id: nil, campaign_id: 1, player_id: 1, created_at: nil, updated_at: nil> 
2.3.1 :007 > c.valid? 
NoMethodError: undefined method `Campplay' for #<Campplay:0x00000004630890> 
Did you mean? campaign 
     from /usr/local/rvm/gems/ruby-2.3.1/gems/activemodel-5.0.0/lib/active_model/attribute_methods.rb:433:in `method_missing' 
     from /usr/local/rvm/gems/ruby-2.3.1/gems/activemodel-5.0.0/lib/active_model/validator.rb:149:in `block in validate' 
     from /usr/local/rvm/gems/ruby-2.3.1/gems/activemodel-5.0.0/lib/active_model/validator.rb:148:in `each' 
     from /usr/local/rvm/gems/ruby-2.3.1/gems/activemodel-5.0.0/lib/active_model/validator.rb:148:in `validate' 
(I truncated here to try & not spam people) 

test_helper.rb中

ENV["RAILS_ENV"] = "test" 
require File.expand_path("../../config/environment", __FILE__) 
require "rails/test_help" 
require "minitest/rails" 

class ActiveSupport::TestCase 
    fixtures :all 
end 

class ActionController::TestCase 
    include Devise::Test::ControllerHelpers 
end 

我Campplay模型...

class Campplay < ApplicationRecord 
    belongs_to :campaign 
    belongs_to :player 

    validates :campaign_id, presence: true 
    validates :player_id, presence: true 

end 

寶石列表--local以 「test」

guard-minitest (2.4.6) 
minitest (5.10.1, 5.8.3) 
minitest-capybara (0.8.2) 
minitest-color (0.0.2) 
minitest-metadata (0.6.0) 
minitest-rails (3.0.0) 
minitest-rails-capybara (3.0.0) 
rack-test (0.6.3) 
rails-dom-testing (2.0.2) 
test-unit (3.1.5) 

全部衛隊文件...

 bundle exec guard 
RubyDep: WARNING: Your Ruby is outdated/buggy. 
RubyDep: WARNING: Your Ruby is: 2.3.0 (buggy). Recommendation: upgrade to 2.3.1. 
RubyDep: WARNING: (To disable warnings, see:http://github.com/e2/ruby_dep/wiki/Disabling-warnings) 
12:46:03 - INFO - Guard::Minitest 2.4.6 is running, with Minitest::Unit 5.10.1! 
12:46:04 - INFO - Guard is now watching at '/home/ubuntu/workspace/basicB' 
12:46:07 - INFO - Running: test/models/campplay_test.rb 
RubyDep: WARNING: Your Ruby is outdated/buggy. 
RubyDep: WARNING: Your Ruby is: 2.3.0 (buggy). Recommendation: upgrade to 2.3.1. 
RubyDep: WARNING: (To disable warnings, see:http://github.com/e2/ruby_dep/wiki/Disabling-warnings) 
RubyDep: WARNING: Your Ruby is outdated/buggy. 
RubyDep: WARNING: Your Ruby is: 2.3.0 (buggy). Recommendation: upgrade to 2.3.1. 
RubyDep: WARNING: (To disable warnings, see:http://github.com/e2/ruby_dep/wiki/Disabling-warnings) 
Run options: --seed 24359 

# Running: 

E 

Error: 
CampplayTest#test_invalid_-_no_campaign: 
NameError: undefined local variable or method `campplay' for #<CampplayTest:0x00000003e05710> 
Did you mean? campplays 
    test/models/campplay_test.rb:14:in `block in <class:CampplayTest>' 


bin/rails test test/models/campplay_test.rb:13 

E 

Finished in 0.275098s, 3.6351 runs/s, 0.0000 assertions/s. 

1 runs, 0 assertions, 0 failures, 1 errors, 0 skips 

[1] guard(main)> 

我對Campplays模式...

create_table "campplays", force: :cascade do |t| 
    t.integer "campaign_id" 
    t.integer "player_id" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.index ["campaign_id"], name: "index_campplays_on_campaign_id" 
    t.index ["player_id"], name: "index_campplays_on_player_id" 
    end 

Rails的版本 - 可能的情況應該是固定的 - 但現在我的工作清單&後衛不接受的版本只是多了一個好辦法...

mirv:~/workspace (master) $ cd basicB 
mirv:~/workspace/basicB (master) $ ruby -v 
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux] 
mirv:~/workspace/basicB (master) $ rvm install 2.3.1 
Already installed ruby-2.3.1. 
To reinstall use: 

    rvm reinstall ruby-2.3.1 

FIX

很簡單,它是損壞的文件...

  1. rails摧毀模型Campplay
  2. 軌摹遷移dropCampplay
  3. 在遷移文件中沒有一個drop_table :campplays
  4. rails g model Campplay campaign:references player:references
  5. 軌分貝:遷移
  6. 副本&粘貼我以前的型號代碼,我有救
  7. 副本&粘貼原我已保存的測試代碼

複製最終的測試文件...

require 'test_helper' 

class CampplayTest < ActiveSupport::TestCase 

    test 'valid Campplay' do 
    cp = Campplay.new(player_id: "1", campaign_id: "1") 
    assert cp.valid?, 'Campplay must have player_id' 
    end 

    # Test one missing from pair of ID 
    test 'invalid - no campaign' do 
    cp = Campplay.new(player_id: 1) 
    refute cp.valid?, 'Campplay passed without a campaign_id' 
    end 

    test 'invalid - no player' do 
    cp = Campplay.new(campaign_id: 1) 
    refute cp.valid?, 'Campplay passed without a name' 
    end 

end 

我記的修復程序@gaston爲他花時間在上面

+0

對不起被替換,但目前還不清楚你想要做什麼。你的測試文件在哪裏?你知道'rails c'打開一個控制檯並且不運行測試嗎? – sixty4bit

+0

Hi @ sixty4bit ...我認爲控制檯中的映射應該比測試文件更清楚地顯示問題。我想讓'.valid?'工作。此外,'rails c test'是我從rails文檔中取出來的,它在rails控制檯中加載測試env以用於提取錯誤消息 - 儘管它聲稱與運行測試文件相同。我會更新這個問題。 – Mirv

+0

可以顯示廣告系列和Campplay課程嗎?什麼錯誤「測試」無效 - 沒有廣告系列投放? – Gaston

回答

0

1)您應該更新紅寶石

Your Ruby is: 2.3.0 (buggy). Recommendation: upgrade to 2.3.1.

2)錯誤是大寫C:

class CampplayTest < ActiveSupport::TestCase 

    test 'invalid - no campaign' do 
    county = Campplay.new(player_id: 1)  #you should change county to campplay 
    refute county.valid?, 'Campplay passed without a name' 
    end 

end 

3)但是,在測試中有一些錯誤。測試將通過,但還有另外一個原因,Campplay既需要ID:

validates :campaign_id, presence: true 
validates :player_id, presence: true 

有效的將失敗名字不是因爲因爲身分證明。您應該添加:

validates :name, presence: true #optional ,length: { minimum: 1 } 

4)我建議你shoulda-matches

這樣做,整個測試將

class CampplayTest < ActiveSupport::TestCase 

    should validate_presence_of(:name) 
    should validate_presence_of(:player_id) 
    should validate_presence_of(:campaign_id) 
    should belong_to(:campaign) 
    should belong_to(:player) 
end 
+0

是的,我已經在那裏做了很多次campplay/Campplay的事情,並添加了刪除驗證是第一步。我複製並粘貼了多次工作測試 - 這也是爲什麼我在第八次剛剛開始離開縣名作爲var名稱之後才終於找到了失敗的原因。我確實同時升級了rvm和已安裝的ruby 2.3.1 - 出於某種原因,它沒有采取警惕......我將版本輸出添加到頁面底部...... – Mirv

+0

是否使我的代碼有效? – Gaston

+0

對不起 - 應該明確地說不 - 不起作用。在這一點上,我將銷燬模型,刪除表並重新啓動 - 它絕對必須是一個損壞的文件,因爲我是唯一一個這種特殊情況發生的地方(如果它不是來自test_helper.rb的繼承) ......但你已經提到過了。在shoulda匹配器上 - 我一直在看這個和rspec - 但在這一點上,我在5個框架和軌道上雜耍三種主要語言,必須讓我每隔一天學習一個寶石......它會更頻繁但沒有他們對我來說很適合開箱... – Mirv