我得到這個ERRORMSG從軌道4,5做測試無法訪問類的對象零軌道4
Error:
ArticlesControllerTest#test_x:
ActionView::Template::Error: undefined method `state' for nil:NilClass
在這條線在視圖中出現的錯誤:
<% @articles.each do |article| %>
<div id="article-container">
<div id="article-content">
<ul>
<li> <b>Status:</b> <%= article.status_id %></li>
<li> <b>State:</b> <%= article.state.state %></li
>
該模型看起來像這樣的文章
belongs_to :user
belongs_to :book, primary_key: :ISBN, foreign_key: :ISBN
has_one :state, primary_key: :states_id, foreign_key: "id"
has_one :status, primary_key: :status_id, foreign_key: "id"
has_and_belongs_to_many :courses
validates :ISBN, presence: true
validates :states_id, presence: true
validates :user_id, presence: true
validates :price, presence: true
validates :status_id, presence: true
這是文章和模式狀態表
文章表:
create_table "articles", force: :cascade do |t|
t.string "ISBN"
t.integer "user_id"
t.integer "price"
t.integer "status_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "states_id"
t.index ["states_id"], name: "index_articles_on_states_id"
end
國表:
create_table "states", force: :cascade do |t|
t.string "state"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
問題是運行這個測試(表明從頂部文件,直到有問題的測試):
require 'test_helper'
class ArticlesControllerTest < ActionDispatch::IntegrationTest
include Devise::Test::IntegrationHelpers
setup do
@article_normal = articles(:normal_article)
@article_admin = articles(:admin_article)
@normal_user = users(:normal_user)
@admin_user = users(:admin_user)
@normal_user.id = @article_normal.user_id
@admin_user.id = @article_admin.user_id
end
test "test x" do
get articles_url
assert_response :success
end
該測試提供了錯誤消息,而在本地主機上它工作。
編輯 測試數據庫中填充了燈具。
條燈具
normal_article:
ISBN: 9788252179675
user_id: 1
price: 500
states_id: 1
status_id: 1
admin_article:
ISBN: 9788252179675
user_id: 2
price: 400
states_id: 1
status_id: 1
控制器方法從article_controller:
# GET /articles
# GET /articles.json
def index
@articles = Article.all
@courses = Course.all
@states = State.all
if params[:search]
@articles = Article.search(params[:search])
else
@articles = Article.all
end
end
是否在測試運行之前在測試數據庫中的文章模型中填充數據? –
文章被填充,因爲我已經測試過了。問題在於訪問狀態表,也許有一些與我錯過的關係有關。根據測試,我可以訪問'article.states_id'和'article.state',但不能訪問'article.state.state'。在localhost中查看 – Aleins
現在就完成了大部分工作 – Aleins