/ Ako sa vysmieť podkategóriu Rails v Rspec? - rubín na koľajniciach, rspec

Ako sa vysmieť podkategóriu Rails v Rspec? - rubín na koľajniciach, rspec

mám BaseController že chcem superclass ďalšie ovládače s. Ja tiež superclass niektoré ovládače s normou ApplicationController.

Môžem napríklad:

class AController < ApplicationController
end

rovnako ako aj...

class BController < BaseController
end

Pri testovaní niekedy potrebujem vytvoriť ľubovoľnú "falošnú" alebo "falošnú" triedu na testovanie pred filtrom, modulom atď. Nechcem to často robiť, ale niekedy je to užitočné.

Vytvoril som jeden v mojich špecifikáciách takto:

class FakeController < ApplicationController
end

To je v poriadku.

Teraz však musím vytvoriť ďalšiu z nich FakeController triedy, ale tentoraz ako moja podtrieda BaseController trieda.

Bohužiaľ FakeController konštanta je už zaregistrovaná a ja dostávam chyby v nadradenej chybe.

Nechcem robiť niečo podobné FakeController2 - ako si myslím, že to otvára zlú plechovku červov.

Nejaké návrhy?

odpovede:

0 pre odpoveď č. 1

Nevidím problém s používaním FakeController2 alebo akýkoľvek iný názov, ale jediná verejná alternatíva, o ktorej si myslím, je predstaviť modul tak, aby bol druhý FakeController existuje v inom mennom priestore, ako v:

module Foo
class FakeController < ApplicationController
end
end

Existuje súkromná metóda remove_const definované na Kernel ktoré možno použiť na zrušenie registrácie konštanty z objektu. Takže, ak FakeController je definovaná na Object, môžete ho zrušiť registrovaním hovoru:

Object.send(:remove_const, :FakeController)

V tomto bode môžete definovať konštantu znova tak, ako keby ste nikdy neboli nikdy definovaní na prvom mieste. (Pamätajte: Ruby je interpretovaný jazyk.)


0 pre odpoveď č. 2

Alternatívou k podradzovaniu vašich radičov je použiť mechanizmus anonymného regulátora poskytnutá klenotom rspec-rail.