Extension:Pickle

The Pickle (or Behavior-driven development, BDD, previously Spec) extension is an extension for "spec" style testing for . Spec type testing is the same type of unit testing that is done in Rspec, Busted and other similar testing frameworks. It will provide a very thin integration to PHP and a few Lua modules and their localizations. The actual code is still valid Lua, and all editing tools will work, except for missing definitions for intellisense in the various editors.

The extension is called Pickle because you pick on your code. It is also a play with words; gherkins are used for pickles. Gherkin is also a language for "step" style testing, a kind of acceptance testing, so you might say these kinds of code snippets are pickles.

An overview of the pickle extension from a user perspective can be found at .

Installation
Pickle depends on the  extension. For recreating the Vagrant-based development environment, see Pickle: Topics/Vagrant.

Usage
The extension can be configured for implicit style or explicit style of tests. The implicit style piggybacks the installation on the  call, but this depends on a functional   call. The Scribunto extension limits the  call, and according to Extension:Scribunto/Lua reference manual it is not quite predictable, thus only the explicit style will work.

The reason for the dependency on  is that the functions are constructed before the   function is called, and thus the calling run-time environment are bound without the global functions. To insert the global functions in the correct run-time environment the  call use. Without the  call the correct run-time environment must be present while creating the functions. Thus a call  must install the global functions.

Switching between the styles are done by the config  or.

If you have a module like "Module:HelloWorld", the ubiquitous and quite pesky example, it will be coded as something like

Then on a subpage  you would test this like like the following


 * Implicit form


 * Explicit form

The implicit form has the lines in the beginning and end removed, and the return statement moved down to the new end of code.

There might be additional changes, like where the  call is available, and how many   calls that can be made.