我有gulp
任务:
gulp.task('test', function () {
return gulp.src('test/runner.html')
.pipe(mochaPhantomJS());
});
这是我的runner.html
:
<!DOCTYPE html>
<html>
<head>
<title>Mocha</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="../node_modules/mocha/mocha.css" />
</head>
<body>
<script src="../node_modules/mocha/mocha.js"></script>
<script>mocha.setup('bdd')</script>
<script src="../node_modules/chai/chai.js"></script>
<script src="../node_modules/requirejs/require.js"></script>
<script>
var assert = chai.assert;
var expect = chai.expect;
var should = chai.should();
</script>
<script src="spec/test.js"></script>
<script>
if (window.mochaPhantomJS) {
console.log('Running mochaPhantomJS...');
mochaPhantomJS.run();
} else {
console.log('Running mocha...');
mocha.run();
}
</script>
</body>
</html>
这是我的test.js
文件:
var chrome = require('sinon-chrome');
var popup = require('../../source/scripts/popup');
describe('sumit', function(){
before(function () {
global.chrome = chrome;
});
it('Should return 1', function(){
assert(popup.sum(0,1) === 1);
});
})
但是当我运行gulp test
时,我收到以下错误消息:
错误:模块名称&#34; sinon-chrome&#34;尚未加载上下文:_。使用require([])
http://requirejs.org/docs/errors.html#notloaded
在defaultOnError中 文件:/// C:/dev/extensions/NEW_EXPRESS/node_modules/requirejs/require.js:1 in onError at 文件:/// C:/dev/extensions/NEW_EXPRESS/node_modules/requirejs/require.js:547 在localRequire中 文件:/// C:/dev/extensions/NEW_EXPRESS/node_modules/requirejs/require.js:1433 在requirejs中 文件:/// C:/dev/extensions/NEW_EXPRESS/node_modules/requirejs/require.js:1794
答案 0 :(得分:1)
在link in the error message中,它意味着您应该使用异步public static final String DATABASE_NAME = "contact"; //database name
public static final int DATABASE_VERSION = 1; //database version
public static final String TABLE_CONTACTS = "contacts";//table name
public static final String KEY_ID = "id"; //column names for contacts table
public static final String KEY_NAME = "name";
public static final String KEY_MOBILE = "mobile";
public static final String KEY_HOME = "home";
public static final String KEY_OFFICE = "office";
public static final String KEY_ADDRESS = "address";
public static final String KEY_EMAIL = "email";
public static final String KEY_COMPANYNAME = "companyName";
public static final String KEY_JOBROLE = "jobRole";
public DbHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
//to create taables
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "(" + KEY_ID + " INTEGER PRIMARY KEY,"
+ KEY_NAME + " TEXT,"
+ KEY_MOBILE + " TEXT,"
+ KEY_HOME + " TEXT,"
+ KEY_OFFICE + " TEXT,"
+ KEY_ADDRESS + " TEXT,"
+ KEY_EMAIL + " TEXT,"
+ KEY_COMPANYNAME + " TEXT,"
+ KEY_JOBROLE + " TEXT" + ")";
sqLiteDatabase.execSQL(CREATE_CONTACTS_TABLE);
}
//upgrading database i.e., if further we add any columns to the existing table ,it will modify automatically
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
sqLiteDatabase.execSQL("DROP TABLE IF EXISTS" + TABLE_CONTACTS); //drop older table if exists
onCreate(sqLiteDatabase); //to create table again
}
public boolean addContact(Contacts contacts) {
SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(KEY_NAME,contacts.getName());
contentValues.put(KEY_MOBILE,contacts.getMobile());
contentValues.put(KEY_HOME,contacts.getHome());
contentValues.put(KEY_OFFICE,contacts.getOffice());
contentValues.put(KEY_ADDRESS,contacts.getAddress());
contentValues.put(KEY_EMAIL,contacts.getEmail());
contentValues.put(KEY_COMPANYNAME,contacts.getCompanyName());
contentValues.put(KEY_JOBROLE,contacts.getJobRole());
sqLiteDatabase.insert(TABLE_CONTACTS,null,contentValues);
sqLiteDatabase.close();
return true;
}
public Contacts getContact(int id) {
SQLiteDatabase sqLiteDatabase =this.getReadableDatabase();
Cursor cursor = sqLiteDatabase.query(TABLE_CONTACTS,new String[] {KEY_ID,KEY_NAME,KEY_MOBILE,KEY_HOME,KEY_OFFICE,KEY_ADDRESS,KEY_EMAIL,KEY_COMPANYNAME,KEY_JOBROLE},KEY_ID + "=?",new String[] {String.valueOf(id)},null,null,null,null);
if(cursor != null)
cursor.moveToFirst();
Contacts contacts = new Contacts(Integer.parseInt(cursor.getString(0)),cursor.getString(1),cursor.getString(2),cursor.getString(3),cursor.getString(4),cursor.getString(5),cursor.getString(6),cursor.getString(7),cursor.getString(8));
return contacts;
}
public List<Contacts>getAllContacts() {
List<Contacts> contactsList = new ArrayList<Contacts>();
String selectQuery = "SELECT * FROM " + TABLE_CONTACTS;
SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
Cursor cursor = sqLiteDatabase.rawQuery(selectQuery,null);
if (cursor.moveToFirst()){
do {
Contacts contacts = new Contacts();
contacts.setId(Integer.parseInt(cursor.getString(0)));
contacts.setName(cursor.getString(1));
contacts.setMobile(cursor.getString(2));
contacts.setHome(cursor.getString(3));
contacts.setOffice(cursor.getString(4));
contacts.setAddress(cursor.getString(5));
contacts.setEmail(cursor.getString(6));
contacts.setCompanyName(cursor.getString(7));
contacts.setJobRole(cursor.getString(8));
contactsList.add(contacts);
}while (cursor.moveToNext());
}
return contactsList;
}
public int getContactsCount() {
String countQuery = " SELECT * FROM " + TABLE_CONTACTS;
SQLiteDatabase sqLiteDatabase = this.getReadableDatabase();
Cursor cursor = sqLiteDatabase.rawQuery(countQuery,null);
cursor.close();
return cursor.getCount();
}
public boolean updateContact(Contacts contacts) {
SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(KEY_NAME,contacts.getName());
contentValues.put(KEY_MOBILE,contacts.getMobile());
contentValues.put(KEY_HOME,contacts.getHome());
contentValues.put(KEY_OFFICE,contacts.getOffice());
contentValues.put(KEY_ADDRESS,contacts.getAddress());
contentValues.put(KEY_EMAIL,contacts.getEmail());
contentValues.put(KEY_COMPANYNAME,contacts.getCompanyName());
contentValues.put(KEY_JOBROLE,contacts.getJobRole());
sqLiteDatabase.update(TABLE_CONTACTS,contentValues,KEY_ID + "= ?",new String[] {String.valueOf(contacts.getId())});
return true;
}
public void deleteContact(Contacts contacts) {
SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
sqLiteDatabase.delete(TABLE_CONTACTS,KEY_ID + "= ?",new String[]{String.valueOf(contacts.getId())});
sqLiteDatabase.close();
}
方法。
因此,如果您将require
更新为以下内容,则应解决该问题:
test.js
答案 1 :(得分:0)
在Angular 7构建中,您可以执行此操作。
Karma.config:
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular-devkit/build-angular/plugins/karma')
],
client: {
clearContext: false // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, '../coverage'),
reports: ['html', 'lcovonly'],
fixWebpackSourcePaths: true
},
reporters: ['kjhtml', 'progress'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false
});
并在您的测试中:
import * as chrome from 'sinon-chrome';
import {MyService} from '../my.service';
describe('RunTaskService', () => {
beforeEach(() => {
TestBed.configureTestingModule({});
(global as any).chrome = chrome;
});
it('should be start a task', done => {
const service: MyService = TestBed.get(MyService);
expect(service).toBeTruthy();
chrome.runtime.lastError = null;
chrome.tabs.query.yields([{url: 'https://cnn.com', id: 123}]);
// call your code to test. the chrome.tabs.query will
// return [{url: 'https://cnn.com', id: 123}]
});