这是我在rails中的第一个项目,由于某种原因,我无法为我的控制器创建我的第一个单元测试。
基本上,我有一个主要对象选举,每个选举可能包含很多选民。 选民是用逗号分隔的电子邮件列表创建的。
在这个测试中,我想测试几个电子邮件列表,以确保它们被正确摄取。 但由于我无法掌握的原因,我的控制器测试无法检测到我的Voter模型。
所以这是代码的相关部分:
voters_controller_test.rb
require 'test_helper'
class VotersControllerTest < ActionController::TestCase
test "should add new voters" do
assert_difference('Voters.count', 2) do
post :create, voter: {election_id: 1, email_list: "me@me.fr, you@you.com"}
end
end
end
voter.rb
class Voter < ActiveRecord::Base
attr_accessor :email_list
belongs_to :election
validates :email, presence: true, :email => true
validates_uniqueness_of :email, :scope => [:election_id]
end
和控制器 votes_controller.rb
class VotersController < ApplicationController
def index
@election = Election.find(params[:election_id])
end
def create
@election = Election.find(params[:election_id])
emails = voter_params[:email_list].squish.split(',')
emails.each { |email| @voter = @election.voters.create(:email =>email) }
redirect_to election_voters_path(@election)
end
private
def voter_params
params.require(:voter).permit(:email_list)
end
end
我应该提一下,我的应用程序工作正常,只有测试失败。
确切的错误消息是:
Run options: --seed 24993
# Running:
E.
Finished in 0.098560s, 20.2922 runs/s, 10.1461 assertions/s.
1) Error:
VotersControllerTest#test_should_add_new_voters:
NameError: uninitialized constant VotersControllerTest::Voters
/home/jll/Documents/01_perso/00_myelections/test/controllers/voters_controller_test.rb:6:in `block in <class:VotersControllerTest>'
这是我的第一次红宝石测试,我从the rails testing tutorial大力鼓舞自己。
您能否就我的错误提供一些见解? 谢谢!
答案 0 :(得分:3)
您试图在Voters
模型而不是Voter
模型上断言差异。这就是代码应该是什么样子。
assert_difference('Voter.count', 2) do
...
end
请记住,模型将带有资源名称的单数版本,而控制器将带有复数名称。例如。模型为Voter
,而控制器为VotersController
。