我正在尝试在Visual Studio 2012中使用Jasmine和Resharper 7运行一些JavaScript代码。我遵循了借助RequireJS的AMD模式,但是我还没有成功地使我的测试在Resharper测试运行器中运行。
有人成功地做到了类似的事情吗?
我正在尝试在Visual Studio 2012中使用Jasmine和Resharper 7运行一些JavaScript代码。我遵循了借助RequireJS的AMD模式,但是我还没有成功地使我的测试在Resharper测试运行器中运行。
有人成功地做到了类似的事情吗?
define("my/sut", function () {
var MySut = function () {
return {
answer: 42
};
};
return MySut;
});
使用Jasmine异步支持初始化SUT。别忘了引用相关内容!
/// <reference path="~/Scripts/require.js"/>
/// <reference path="../code/sut.js" />
describe("requireJS with Jasmine and Resharper", function () {
it("should be executed", function () {
// init SUT async
var sut;
runs(function () {
require(['my/sut'], function (MyModel) {
sut = new MyModel();
});
});
waitsFor(function () {
return sut;
}, "The Value should be incremented", 100);
// run the test
runs(function () {
expect(sut.answer).toBe(42);
});
});
});
我希望这适用于更多的模块。在我的情况下,它与等待'0'毫秒一起工作。
以下是对mgsdev回答的简化版本,将加载代码放在beforeEach语句中,这样您就可以编写简短的期望。
模块:
define("stringCalculator", function () {
return {
calculate: function (string) {
var result = 0;
string.split("+").forEach(function(number) {
result += parseInt(number);
});
return result;
}
};
});
测试文件: 如果计算器未定义,则会在每个期望之前尝试加载它。
/// <reference path="~/Scripts/require.js"/>
/// <reference path="~/code/stringCalculator.js"/>
describe("string calculator", function () {
var calculator;
beforeEach(function () {
if (!calculator) {
require(["stringCalculator"], function (stringCalculator) {
calculator = stringCalculator;
});
waitsFor(function () {
return calculator;
}, "loading external module", 1000);
}
});
it("should add 1 and 2", function () {
var result = calculator.calculate("1+2");
expect(result).toEqual(3);
});
it("should add 2 and 2", function () {
var result = calculator.calculate("2+2");
expect(result).toEqual(4);
});
it("should add 1, 2 and 3", function() {
var result = calculator.calculate("1+2+3");
expect(result).toEqual(6);
});
});
describe("add function", function(){
it("calls renderNew", function(done){
define("taskRenderer", [], function() {
return {
renderNew: function(){}
};
});
require(["taskRenderer"], function(taskRenderer) {
spyOn(taskRenderer, "renderNew");
taskRenderer.renderNew();
expect(taskRenderer.renderNew).toHaveBeenCalled();
done();
});
}
}
这样,直到模块被加载并且测试不会过早地被标记为完成,您才会实际执行测试。