2017-04-01 2 views
0

J'ai différentes fonctions pour écrire un test Rspec. Mais le problème est, ce que j'essaie de tester ici, a la même syntaxe pour chaque fonction, donc je dois copier coller cette ligne "attendue" pour chaque cas de test. Savez-vous comment je peux écrire cette attente une fois et appliquer à chaque étape de test?Comment puis-je utiliser un Rspec attendez-vous à ce que l'assertion soit exécutée pour chaque test, sans me répéter?

oeil à "attendre (Delayed :: Job.count) .à eq (1)" Dans le code ci-dessous:

it 'is able to send reminder email for submission deadline to signed-up users ' do 
    mail = DelayedMailer.new(@assignment.id, "submission", @due_at) 
    Delayed::Job.enqueue(payload_object: mail, priority: 1, run_at: 1.second.from_now) 
    expect(Delayed::Job.count).to eq(1) 
    expect(Delayed::Job.last.handler).to include("deadline_type:  submission") 
    expect { mail.perform } .to change { Mailer.deliveries.count } .by(1) 
    end 

    it 'is able to send reminder email for review deadline to reviewers ' do 
    mail = DelayedMailer.new(@assignment.id, "review", @due_at) 
    Delayed::Job.enqueue(payload_object: mail, priority: 1, run_at: 1.second.from_now) 
    expect(Delayed::Job.count).to eq(1) 
    expect(Delayed::Job.last.handler).to include("deadline_type: review") 
    expect { mail.perform } .to change { Mailer.deliveries.count } .by(1) 
    end 

    it 'is able to send reminder email for Metareview deadline to meta-reviewers and team members of the assignment' do 
    mail = DelayedMailer.new(@assignment.id, "metareview", @due_at) 
    Delayed::Job.enqueue(payload_object: mail, priority: 1, run_at: 1.second.from_now) 
    expect(Delayed::Job.count).to eq(1) 
    expect(Delayed::Job.last.handler).to include("deadline_type: metareview") 
    expect { mail.perform } .to change { Mailer.deliveries.count } .by(2) 
    end 

Répondre

2

Vous avez deux options:

1) Faire une méthode d'aide qui enveloppe cette logique:

Le seul inconvénient de celui-ci est que vous devrez appeler la méthode partout où vous le voulez.

ou

2) Utilisez un après chaque crochet: https://relishapp.com/rspec/rspec-core/v/3-4/docs/helper-methods/define-helper-methods-in-a-module

Je ne recommande pas celui-ci, car il va littéralement courir après chaque spécification.

+0

Je pense que votre deuxième lien est le même avec le premier par erreur. Je sais ce que vous dites, mais je ne vois pas les gens mettre des commandes "expect() ..." dans les aides, ou "après" les blocs. –