2014-12-29 30 views
0

我是Rspec測試的新手,所以很抱歉如果我的代碼中的問題顯然是錯誤的。我試圖測試是否發送短信到我保存的Twilio號碼。Rspec控制器發佈使用Twilio Ruby創建

這裏是我的控制器/ messages_controller.rb

require 'twilio-ruby' 

class MessagesController < AppController 
    include Webhookable 

    skip_before_action :verify_authenticity_token 
    skip_before_action :authenticate_user! 

    def create 
    Message.create!(parent_id: nil, 
       content_type: "sms", 
       content: params['Body'], 
       origin: params['From'].gsub("+1", ""), 
       destination: params['To'].gsub("+1", ""), 
       received_at: Time.now()) 
respond_to do |format| 
    format.all { render :nothing => true, :status => 200 } 
end 
end 

end 

這裏是我的規格/控制器/ messages_controller_spec.rb我曾經讓!()創建了一堆的創建方法的對象在其回調使用

require 'rails_helper' 

RSpec.describe MessagesController, :type => :controller do 
describe "#create" do 
    let(:message) { build(:message) } 
    let!(:hotel) { create(:hotel) } 
    let!(:group) { create(:group) } 
    let!(:guest) { create(:test_guest) } 
    let!(:user) { create(:user) } 
    let!(:visit) { create(:visit) } 
    let!(:group_user) { create(:group_user) } 

    context "when new text message comes in" do 
     it "saves the message" do 
      post :create, :Body => message.content, :From => message.origin, :To => message.destination 
      expect(Message.last).to be_truthy 
     end 
    end 
end 
end 

這裏是失敗的消息時,我運行測試

Failures: 

1) MessagesController#create when new text message comes in saves the message 
Failure/Error: let!(:visit) { create(:visit) } 
NoMethodError: 
    undefined method `users' for nil:NilClass 
# ./app/models/hotel.rb:30:in `managers' 
# ./app/models/concerns/visit_message.rb:9:in `create_check_in_messages' 
# ./spec/controllers/messages_controller_spec.rb:10:in `block (3 levels) in <top (required)>' 

從那裏我去一個核對型號/ hotel.rb:30

def managers 
groups.first.users.managers.order("created_at ASC") 
end 

不過,我想,因爲我用讓!(:組){創建(:組)},當我跑這不會是零考試。任何方向或建設性的批評將不勝感激。

回答

0

有一件事我可以看到的是,在其中您創建對象的順序是不正確的

let(:message) { build(:message) } 
let!(:hotel) { create(:hotel) } 
let!(:group) { create(:group) } 
let!(:user) { create(:user) } 
let!(:group_user) { create(:group_user, :group => group, :user => user) } 
let!(:guest) { create(:test_guest) } 
let!(:visit) { create(:visit) } 

你應該在創建之前創建組,userjoin記錄group_user用正確的組和用戶訪問。

+0

感謝您指出,我理解您的解釋。我做了調整,但是,我仍然從上面得到同樣的失敗。難道是因爲我沒有正確保存對象,所以當它進入「組」表時什麼也沒有?或者這是我需要將「經理」方法剔除的情況? –