2010-02-02 15 views
13

Trong tôi đặc tả điều khiển tôi làm điều này:rspec thử nghiệm một bộ điều khiển bài thay đổi params của tôi từ biểu tượng để các chuỗi và phá vỡ các xét nghiệm của tôi

it "should create new message" do 
    Client.should_receive(:create).with({:title => 'Mr'}) 
    post 'create' , :client => {:title => "Mr" } 
end 

... và trong bộ điều khiển của tôi, tôi đang làm ...

def create 
    client = Client.create(params[:client]) 
end 

Tuy nhiên điều này là không có thông báo lỗi sau:

expected: ({:title=>"Mr"}) 
     got: ({"title"=>"Mr"}) 

tôi đang tự hỏi tại sao điều này đang xảy ra một d cách làm cho nó hoạt động

Trả lời

15

Đó là vì bạn đang truyền một biểu tượng chứ không phải một chuỗi. Điều này nên sửa chữa nó:

it "should create new message" do 
    Client.should_receive(:create).with({:title => 'Mr'}) 
    post 'create' , :client => {"title" => "Mr" } 
end 

Dưới đây là một bài đăng trên blog về nó: "Understanding Ruby Symbols"

+0

để bạn biết nếu có thể của nó để làm cho bài vượt qua nó như một biểu tượng như tôi muốn tạo băm từ một kế hoạch chi tiết thợ máy và họ trở về biểu tượng không dây – ssmithstone

+0

Tôi không nghĩ rằng bạn có thể làm một điều như vậy, nó chỉ là cách POST hoạt động – marcgg

2

@ssmithone bạn có thể sử dụng ActiveSupport::HashWithIndifferentAccess để vượt qua params như là biểu tượng thay vì chuỗi. Điều này sẽ làm việc:

it "should create new message" do 
    Client.should_receive(:create).with({:title => 'Mr'}.with_indifferent_access) 
    post 'create', :client => {:title => "Mr"} 
end 
Các vấn đề liên quan