我们正在用jsdom和角度模拟测试角度js。我有一个设置文件,它按顺序需要jsdom,angular和angular mocks。足够简单,可以使用控制器和服务设置测试。我遇到了templateUrl的问题。我知道Karma你必须设置一个配置。我遇到了一个github要点,这些工具一起使用https://gist.github.com/rikukissa/dcb422eb3b464cc184ae。
我想知道如何访问templateUrl?
由于jsdom与节点一起运行,所以我需要文件系统并调用readFileSync var fs = require('fs'); template = $ sce.trustAsHtml(fs.readFileSync('pathToTemplates,'utf8'));
**注意需要$ sce才能让我读取文件。我知道代码使用的是1.5版,它应该实例化,但我没有编译就不能编译。
这是我目前使用jasmine和jsdom的测试
describe('hero Directive', function () {
var $compile,
$rootScope,
scope,
element,
template,
haConfig,
$sce
ctrl;
beforeEach(function () {
angular.mock.module('ha.module.core');
angular.mock.inject(function (_$compile_, _$rootScope_, _$controller_, $httpBackend, $templateCache) {
$compile = _$compile_;
$rootScope = _$rootScope_;
scope = $rootScope.$new();
haConfig = _haConfig_;
$templateCache.put("haConfig.getTemplateUrl('explore-hero-base-template.html')", template);
var html = angular.element("<div explore-hero></div>");
element = $compile(html)($scope)
html返回值
{'0': HTMLDIVElement {239:2}, length: 1}
我理解长度属性,但 239:2让我感到困惑。
最后阻止我进一步调试和修复此测试的问题是$ scope.digest()没有被调用
beforeEach(function()
后停止
element = $compile(html)($scope)
忽略摘要并直接进入规范。
$scope.$digest();
console.log('called not being reached');
});
});
afterEach(function () {
// need to remove the element element.remove();
});
describe('directive controller', function () {
it('should dispatch call $emit with $methodsBound', function () {
spyOn(scope, '$emit');
//expect(scope.$emit).toHaveBeenCalledWith('$methodsBound');
});
});
});