Un po 'strano, questa non è una funzionalità di base
Puoi aggiungere un abbinatore personalizzato come questo:
JasmineExtensions.js
yourGlobal.addExtraMatchers = function () {
var addMatcher = function (name, func) {
func.name = name;
jasmine.matchers[name] = func;
};
addMatcher("toBeGreaterThanOrEqualTo", function () {
return {
compare: function (actual, expected) {
return {
pass: actual >= expected
};
}
};
}
);
};
In effetti stai definendo un costruttore per il tuo matcher: è una funzione che restituisce un oggetto matcher.
Includilo prima di "avviare". I matcher di base vengono caricati al momento dell'avvio.
Il tuo file html dovrebbe assomigliare a questo:
<!-- jasmine test framework-->
<script type="text/javascript" src="lib/jasmine-2.0.0/jasmine.js"></script>
<script type="text/javascript" src="lib/jasmine-2.0.0/jasmine-html.js"></script>
<!-- custom matchers -->
<script type="text/javascript" src="Tests/JasmineExtensions.js"></script>
<!-- initialisation-->
<script type="text/javascript" src="lib/jasmine-2.0.0/boot.js"></script>
Quindi nel tuo boot.js aggiungi la chiamata per aggiungere i matcher dopo che jasmine è stato definito ma prima di jasmine.getEnv (). Get env è in realtà una chiamata di configurazione (leggermente fuorviante).
I matcher vengono impostati nella chiamata a setupCoreMatchers nel costruttore Env.
/**
* ## Require & Instantiate
*
* Require Jasmine's core files. Specifically, this requires and attaches all of Jasmine's code to the `jasmine` reference.
*/
window.jasmine = jasmineRequire.core(jasmineRequire);
yourGlobal.addExtraMatchers();
/**
* Since this is being run in a browser and the results should populate to an HTML page, require the HTML-specific Jasmine code, injecting the same reference.
*/
jasmineRequire.html(jasmine);
/**
* Create the Jasmine environment. This is used to run all specs in a project.
*/
var env = jasmine.getEnv();
Mostrano un altro modo per aggiungere abbinamenti personalizzati nei test di esempio, tuttavia il modo in cui funziona è ricreare gli abbinamenti prima di ogni singolo test utilizzando un file beforeEach
. Sembra piuttosto orribile, quindi ho pensato di seguire questo approccio.