Używam testowania wtyczki Vima do testowania jednostkowego. Wszystko działa, ale szukam lepszego/kanonicznego sposobu wykonywania lokalnych funkcji skryptowych. Ponieważ nie są one bezpośrednio widoczne poza scenariuszem, obecnie ujawniam skrypt <SID>
i wysyłam go do moich wywołań, aby je uruchomić.Testowanie jednostek Funkcje lokalne skryptu Vima za pomocą programu Vimrunner
muszę dodać ten kod do mojego pluginu do odsłonięcia SID:
function! s:SID()
let fullname = expand("<sfile>")
return matchstr(fullname, '<SNR>\d\+_')
endfunction
let g:my_plugin_SID = s:SID()
To narazi SID jako przykład <SNR>18_
. Ponieważ funkcje Vim są globalne, a tylko nazwa-munged, funkcje skryptowe lokalne mogą być wywoływane spoza skryptu poprzedzając SID:
:call <SNR>18_some_function()
Potem zrobić to w ciemno:
describe "s:reverse_string" do
let!(:sid) { VIM.command("echo g:my_plugin_SID") }
def reverse_string(string)
VIM.command("echo #{sid}reverse_string('#{string}')")
end
it "does something" do
reverse_string("foo").should == "oof"
end
end
Czy jest lepszy sposób to zrobić?
Zmierzałem w tym kierunku, ale nie mam ochoty na testowanie. Wiem, że to naprawdę nie ma znaczenia, ale lubię zachować przestrzeń nazw tak znaczącą, jak pozwala Vim. Podoba mi się pomysł przeanalizowania go z ': scriptnames', aby uniknąć wprowadzania kodu testowego do produkcji. Wciąż otwarte na inne sugestie. –
Próbowałem zastąpić moje s: MyFunction() MyPlugin # MyFunction(), ale wtedy wywołanie go w mapowaniu w tym samym pliku wydaje się nie działać. Czy coś mi umyka? – NicolasWebDev
@Sathors: 'MyPlugin' musi być dokładną nazwą twojej wtyczki, oczywiście. –