测试Controller时模型的未初始化常量

时间:2014-05-01 05:56:07

标签: ruby-on-rails ruby unit-testing ruby-on-rails-4

这是我在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大力鼓舞自己。

您能否就我的错误提供一些见解? 谢谢!

1 个答案:

答案 0 :(得分:3)

您试图在Voters模型而不是Voter模型上断言差异。这就是代码应该是什么样子。

assert_difference('Voter.count', 2) do
  ...
end

请记住,模型将带有资源名称的单数版本,而控制器将带有复数名称。例如。模型为Voter,而控制器为VotersController