2016-07-27 25 views
0

Wie schreibe ich einen Rspec-Test für Update-String-Attribut? Ich habe Attribut: "Status" und Array für das = [ 'First', 'Zweite'] - Modell BeitragTesten von Model Interactor - Update-Attribut RAILS RSpec

it "update status attribute" do expect(@result).to change(Post, :status) end

ist es richtig?

Mein Interaktorsystem:

class User::Post::RequestVerification < ActiveInteraction::Base 

    object :user 

    string :status, default: nil 
    integer :id, default: nil 

    validate :status 

    def execute 
    update_status! 
    end 

    def post 
    @post ||= post.find(id) 
    end 

    def update_status! 
    @post.update_atrributes!(
     status: ['First', 'Second'] 
    ) 
    end 

    def status 
    errors.add(:base, 'error') 
    end 
end 

Mein RspecTest:

require 'rails_helper' 

describe User::Post::RequestVerification do 

    before do 
    @result = User::Post::RequestVerification.run(new_params[:post]) 
    end 

    let!(:user) {Post.new} 
    let!(:user) { User.create } 
    let!(:new_params) do 
    { 
     post: { 

      status: 'First' 

     } 
    } 
    end 


    it "should update status" do 
    expect(@result).to change(Post, :status) 
    end 

    end 

Ich möchte einen Test schreiben, ein Attribut zu aktualisieren.

+0

Sie es ausführen Haben? Welchen Fehler oder welche unerwartete Ausgabe sehen Sie? – aBadAssCowboy

+0

'erwarteter #Status, der geändert wurde, aber keinen Block erhalten hat' und binding.pry ' @details = {: base => [{: error => "error"}, {: error => "error" }],: status => [{: type => "string",: fehler =>: invalid_type}]}, @messages = {: base => ["fehler", "fehler"],: status => ["ist keine gültige Zeichenkette"]}> ' – Rafonix

Antwort

0

Sieht aus wie die Syntax von change ist anders. Es gibt eine ähnliche Frage mit dem ähnlichen Fehler, den Sie erwähnen. Ich werde die Antwort nicht kopieren, während ich Sie dorthin verweisen kann.

expected #count to have changed by 1, but was not given a block

auch sieht, wie Sie an die Kette müssen change mit by oder from(..).to(..)

einen Blick auf die Dokumentation Nehmen https://www.relishapp.com/rspec/rspec-expectations/v/2-0/docs/matchers/expect-change

+0

danke, aber das ist richtig (mit rspec matcher" ändern "), um einen Test für Update-Attribut zu schreiben? – Rafonix

+0

Sieht aus wie es ist nicht der richtige Weg! Bitte werfen Sie einen Blick auf die Dokumentation, die ich in der Antwort gepostet habe. Ich habe es aktualisiert. – aBadAssCowboy

+0

'expect {@result} .zu ändern (@result,: status) .from ('First'). ('Second')' was denkst du darüber? – Rafonix