【发布时间】:2016-08-12 12:54:32
【问题描述】:
我有一个非常简单的jasmine 单元测试,目标是测试AngularJS 控制器上的简单操作,如下所示:
/// <reference path="../src/jasmine.js"/>
/// <reference path="../../Scripts/angular.js"/>
/// <reference path="../../Scripts/angular-mocks.js"/>
/// <reference path="../../Scripts/angular-ui-router.js"/>
/// <reference path="../../Scripts/angular-route.js"/>
/// <reference path="../../Scripts/angular-resource.js"/>
/// <reference path="../../Scripts/angular-ui/ui-bootstrap.js"/>
/// <reference path="../../app/app.js"/>
/// <reference path="../../app/controllers/myController.js"/>
describe("my Controller", function () {
var scope, ctrl, vm;
beforeEach(module("app"));
beforeEach(inject(function ($controller, $rootScope) {
scope = $rootScope.$new();
ctrl = $controller(MyController, { $scope: scope });
vm = ctrl;
}));
it("sets the title", function() {
expect(vm.title).toBe("This is the title");
});
});
使用以下任一方法开始上述测试通过:
- 打开包含相同引用的
SpecRunner.html,并在jasmine默认测试运行程序中显示通过单元测试 - 如果通过
ReSharper测试运行程序运行,则无需修改即可通过测试(此工具并不重要,只是显示使用另一个测试运行程序通过了测试;测试不是罪魁祸首)
但是,无论我何时使用 Chutzpah 执行以下任何操作,测试都会失败:
- 使用
chutzpah.console.exe从命令行运行 - 使用
VS.NET中打开的右键菜单运行JS测试
每次出现以下错误:
错误:[$injector:modulerr] 无法实例化模块 应用程序由于:[$injector:nomod] 模块 “应用程序”不可用!你要么拼错了 模块名称或忘记加载它。如果注册一个模块,请确保 您将依赖项指定为第二个参数。
所以如果AngularJS 引用不 包括在内,这是一个非常典型的错误。但是,正如您在上面看到的,它们肯定包含在内,其他测试运行者看到它们并且测试通过了。无论我是从命令行运行单元测试还是在 VS.NET 中查看输出,错误都是相同的。
我什至从命令行打开了/trace 参数并查看了chutzpah.log 文件。果然是找到了 Angular 参考文件,所以我不确定为什么测试失败了。
我已经看到了大量关于此的帖子,解决方案始终是缺少参考。这里不是这种情况,我被困住了。使用 Chutzpah 使这个测试通过我缺少什么?
【问题讨论】:
-
你也检查了路径吗?
-
绝对是的。如前所述,其他测试运行者通过这些路径引用通过了此测试。同样在查看 chutzpah 日志时,我可以看到它在正确的路径中找到引用并将它们添加到本地测试工具中。
-
您能否将您正在尝试的内容与 Chutzpah 源代码中包含的几个 AngularJS 示例进行比较 (github.com/mmanela/chutzpah/tree/master/Samples/Angular)
-
@MatthewManela - 我已经把你的样品倒过来了,归结为我无法让
angular.mock.module工作。我将您的示例提取到我的项目中并且它们运行了,但您没有致电angular.mock.module。我看到另一个 Git 问题:github.com/mmanela/chutzpah/issues/444。有趣的是,“运行 JS 测试”选项显示:Module 'app' is not available!作为错误。如果我使用 same 测试运行“在浏览器中打开”,TypeError: Class constructor StatesProvider cannot be invoked without 'new'同样是的,我确实添加了对ui-router.js的引用 -
我建议您获取在浏览器中打开的 HTML 文件,复制并修改它以便您的测试运行。一旦你这样做了,我们就可以对 Chutzpah 需要生成的内容进行逆向工程
标签: angularjs visual-studio unit-testing jasmine chutzpah